weniger Muster - endet mit [ ] oder $

weniger Muster - endet mit [ ] oder $

Beziehen aufkann ich einzelne Manpages für die in Bash integrierten Befehle erhalten:

bashman () { man bash | less -p "^       $1 "; }

Diese Funktion springt direkt zum gewünschten Abschnitt mit manuellen Bash-Parametern.

Ich möchte, dass alle manuellen Namen und Parameter sofort akzeptiert werden, daher ändere ich diese Funktion wie folgt:

function superman () {
    man "$1" | less -p "^[ ]+[-]*$2[ ]"
}

Es funktioniert perfekt mit:

$ Superman Bash-Typ

Und springen Sie zum gewünschten Manpage-Abschnitt:

Bildbeschreibung hier eingeben

Aber es funktioniert nicht in Abschnitten, die mit einer neuen Zeile enden. Ich muss es ändern in:

function superman () {
    man "$1" | less -p "^[ ]+[-]*$2$"
}

Anschließend $ superman gcc Wallkann mit „run“ zum WallParameter gesprungen werden:

Bildbeschreibung hier eingeben

Wie kombinieren [ ]und $sein [ ] OR $? dhendet mit „mindestens einem Leerzeichen“ ODER „Newline“.

Ich habe es versucht $ man gcc | less -p "^[ ]+[-]*Wall[ |$]", aber es funktioniert nicht.

Bitte beachten Sie, dass ich diesen unerwünschten Sprung akzeptiere, der zwar endet [ ], aber nicht wirklich den Anfang eines Abschnitts darstellt, da ich glaube, dass er nicht lösbar ist, wenn der reguläre Ausdruck [ ]ein ODER ist $:

Bildbeschreibung hier eingeben

[Danke für die Antworten]

Ich möchte hier meine endgültige Form teilen:

function superman () {
    if [[ "$1" == "-I" || "$1" == "-i" ]]; then
        man "$2" | less -I -p "^[ ]+-*$3( |=|,|$|\[)"
    else
        man "$1" | less -p "^[ ]+-*$2( |=|,|$|\[)"
    fi
}

Dies funktioniert, wenn ich ausführe, superman -i gcc wlwas bedeutet, dass beim Springen in den Abschnitt keine Groß-/Kleinschreibung beachtet wird -Wl,option. -Wl,optionvon gccrequire ,. scaletempovon mplayerrequire . [und scalevon mplayerrequire.=

Ich habe infoauch für die Version geschrieben:

function superinfo () {
    if [[ "$1" == "-I" || "$1" == "-i" ]]; then
        info "$2" | less -I -p "^ *‘*'*-*\** *$3’*( |=|,|$|\[|:|')"
    else
        info "$1" | less -p "^ *‘*'*-*\** *$2’*( |=|,|$|\[|:|')"
    fi
}

Getestet mit superinfo gcc _HPPA, superinfo -i gcc werror, superinfo -i gcc wl, , superinfo -i mplayer scaletempo, superinfo -i mplayer stats, superinfo -i ls -f, und superinfo -i bash -a(mit Minuszeichen, das hier einen großen Unterschied macht). Unicodes LINKES EINFACHE ANFÜHRUNGSZEICHEN wird von verwendet .-fls

Antwort1

[Ich glaube, Sie haben die Bedeutung der eckigen Klammern ]in einem regulären Ausdruck falsch verstanden . Beachten Sie Ihr Muster:

^[ ]+[-]*Wall[ |$]

[ ]ist genau dasselbe wie (ein einzelnes Leerzeichen) und [-]ist genau dasselbe wie -. Und im letzten Teil des Musters [foo|bar]bedeutet nicht „entweder foooder bar“.

Was Sie suchen, ist ( |$). Das ist die Syntax zum Abgleichen einer Sache ODER einer anderen Sache. (Sie müssen diesen Teil des Musters wegen des Dollarzeichens auch in einfache Anführungszeichen oder einen Backslash anstelle von doppelten Anführungszeichen setzen).

[thing]bezeichnet eine Zeichenklasse: es entspricht entweder t, h, i, n, oder g.

Antwort2

Wie kombiniert man [ ]und $?

([ ]|$)oder( |$)

verwandte Informationen