ich möchte in einem Bash-Only-Script (also kein sed!) über eine RE auf eine Kommentarzeile der Form
[|\t]\*#+
testen.
Ein gültiger Kommentar liegt also dann vor, wenn das erste Nicht-Whitespace-Zeichen die Raute ist.
Ich hab’s stundenlang erfolglos nach dem Advanced-Bash-Scripting-Howto mit expr versucht.
Also beispielsweise mit :
comment=`expr match $line [|\t]*#`
Alle Varianten schlugen fehl.
Wie zum Geier kriegt man das hin?
Wer-weiss-Rat?
b=expr match $a [0-9]*
echo Number of digits at the beginning of $a is $b.
Hm, bei mir sieht das Beispiel im ABSG so aus:
b=`expr match "$a" '[0-9]*'`
echo Number of digits at the beginning of \"$a\" is $b.
Da wurde also noch der RE gequotet. Wenn da 'ne Fehlermeldung von der Shell kommt, dann möchte diese den RE interpretieren, was sie aber nicht soll, also quoten.
b=expr match "$a" '[0-9]\*'
echo Number of digits at the beginning of „$a“ is $b.
Da wurde also noch der RE gequotet. Wenn da 'ne Fehlermeldung
von der Shell kommt, dann möchte diese den RE interpretieren,
was sie aber nicht soll, also quoten.
Yo…
Hört sich logisch an.
Nur bringt ein
comment=`expr match "$line" '^[|\t]*#'`
expr: warning: unportable BRE: ^[|\t]*#': using ^’ as the first character of the basic regular expression is not portable; it is being ignored
Wo bekomme ich denn Dokus her für die „basic regular expressions“. Wieso darf ich das Caret dort nicht als erstes Zeichen nutzen?
ich möchte in einem Bash-Only-Script (also kein sed!) über
eine RE auf eine Kommentarzeile der Form
[
|\t]*#+
testen.
ich kann Dir zwar leider bei Deinem eigentlichen Problem nicht helfen; aber wenn Du es geschafft hast, teste doch mal die Zeile
|||#
damit
In eckigen Klammern steht eine Zeichenklasse, d.h. es wird gematcht, wenn eines der enthaltenen Zeichen vorkommt - inkl. „|“. Whitespaces sind übrigens in der Zeichenklasse \s gesammelt. Zudem wird ohne führendes „^“ mitten in der Zeile gesucht, nicht am Anfang. Die richtige RegExp wäre also:
^\s*#
Ein „+“ dahinter ist ebenfalls nicht nötig, Dir reicht ja bereits eine einzelne Raute.
Whitespaces sind übrigens in der Zeichenklasse \s
gesammelt. Zudem wird ohne führendes „^“ mitten in der Zeile
gesucht, nicht am Anfang. Die richtige RegExp wäre also:
^\s*#
Oh yo…
Gut zu wissen.
Danke.
Aber leider spuckt mich die Bash immer noch an:
expr: warning: unportable BRE:
`^\s*#': using `^' as the first character of the basic regular expression
is not portable; it is being ignored
Ich habe grade mal ein bisschen mit deiner Syntax rumprobiert.
Aber leider spuckt mich die Bash immer noch an:
expr: warning: unportable BRE:
^\s*#': using ^’ as the first character of the basic
regular expression
is not portable; it is being ignored
Diese Fehlermeldung kam bei mir auch. Nachdem ich das ^ duruch einen \ vor der Bash versteckt habe, also ^\s*# (comment=expr match "$line" '\^\s*#')gab’s keine Fehlermeldung mehr. Ich kann natürlich nicht dafür garantieren, dass das Ergebnis richtig ist. Ein Test mit