Testen von regulären Ausdrücken von stdin mit grep|sed|awk

Testen von regulären Ausdrücken von stdin mit grep|sed|awk

Manchmal möchte ich testen, ob mein regulärer Ausdruck korrekt ist.

Wie kann ich eine umgekehrte regexÜbereinstimmung von der Standardeingabe aus durchführen?

Beispielsweise kann ich eine Zeichenfolge mit dem bereitgestellten regulären Ausdruck abgleichen, etwa:

grep "\(foo\)-bar"
foo
bar
foo-bar
foo-bar #Match found

Ich möchte das Gegenteil tun, etwa so:

$ grep "This is one string"
\(This\) #Will send "This" to stdout
This?.*  #Will send full match

Ist das irgendwie ohne viel Scripting möglich?

Antwort1

Definieren Sie die folgende Funktion in Ihrer Shell (Sie können sie einfach eintippen oder in Ihre einfügen ~/.bashrc):

testregex() {
  [ "$#" -eq 1 ] || return 1
  while IFS= read -r line; do
    printf '%s\n' "$1" | grep -Eoe "$line"
  done
}

Anschließend können Sie einen regulären Ausdruck wie folgt testen:

$ testregex 'This is a line'
This            <--input
This            <--output
This?.*         <--input
This is a line  <--output
slkdjflksdj     <--input with no output (no match)
s.*             <--input
s is a line     <--output
$               <--I pressed Ctrl-D to end the test

Antwort2

Sie können -als „Datei“ für die Suche verwenden, wobei die Standardeingabe als „Heuhaufen“ verwendet wird, um in Folgendem nach passenden „Nadeln“ zu suchen:

$ grep -oE '[aeiou]+' -
This is a test  < input
i               > output
i               > output
a               > output
e               > output
whaaaat?        < input
aaaa            > output

Verwenden Sie Ctrl- Dzum Senden EOFund Beenden des Streams.

Ich glaube allerdings nicht, dass Sie dasselbe tun können, um die Standardeingabe für den -fSchalter zu verwenden, der eine Liste von Mustern aus einer Datei liest. Wenn Sie jedoch viele Muster für Text in einem Korpus haben, können Sie:

grep -f needle-patterns haystack.txt

wobei needle-patternses sich um eine Klartextdatei mit einem regulären Ausdruck pro Zeile handelt.

verwandte Informationen