![weniger Muster - endet mit [ ] oder $](https://rvso.com/image/97017/weniger%20Muster%20-%20endet%20mit%20%5B%20%5D%20oder%20%24.png)
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:
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 Wall
kann mit „run“ zum Wall
Parameter gesprungen werden:
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 $
:
[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 wl
was bedeutet, dass beim Springen in den Abschnitt keine Groß-/Kleinschreibung beachtet wird -Wl,option
. -Wl,option
von gcc
require ,
. scaletempo
von mplayer
require . [
und scale
von mplayer
require.=
Ich habe info
auch 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 .-f
ls
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 foo
oder 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( |$)