Command-Line
使用 grep|sed|awk 從標準輸入測試正則表達式
有時,我想測試我的正則表達式是否正確。
如何
regex
從標準輸入進行反向匹配?Fe 我可以將字元串與提供的正則表達式匹配,例如:
grep "\(foo\)-bar" foo bar foo-bar foo-bar #Match found
我想做的恰恰相反,是這樣的:
$ grep "This is one string" \(This\) #Will send "This" to stdout This?.* #Will send full match
這在沒有太多腳本的情況下可能嗎?
您可以使用
-
作為“文件”進行搜尋,它將使用標準輸入作為“乾草堆”來搜尋匹配的“針”:$ grep -oE '[aeiou]+' - This is a test < input i > output i > output a > output e > output whaaaat? < input aaaa > output
使用
Ctrl
-D
發送EOF
和結束流。不過,我不相信您可以對
-f
從文件中讀取模式列表的開關使用標準輸入。但是,如果您在一個語料庫上有很多文本模式,您可以:grep -f needle-patterns haystack.txt
where
needle-patterns
是一個純文字文件,每行一個正則表達式。
在你的 shell 中定義以下函式(你可以輸入它,或者把它放在你的
~/.bashrc
.testregex() { [ "$#" -eq 1 ] || return 1 while IFS= read -r line; do printf '%s\n' "$1" | grep -Eoe "$line" done }
然後您可以按如下方式測試正則表達式:
$ 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