Grep
如何從 Perl 中轉義 egrep 的元字元,如元引用?
Perl 有一個函式
metaquote()
用來轉義正則表達式的所有特殊字元。是否有等效的技術
egrep
?範例:如果我正在搜尋 string
abc.def.ghi
,我需要記住手動轉義點,例如,abc\.def\.ghi
我假設
egrep
沒有內置模式/功能來執行此操作,但我對 Perl/sed/awk 中的“單線”開放以模擬metaquote()
.egrep
此外,Perl 可能在瑣碎的情況下工作,但正則表達式語法在andmetaquote()
之間是不同的。egrep``perl
使用
-F
選項grep
將模式視為固定字元串:grep -F 'abc.def.ghi' <file
另請注意,您不需要呼叫
egrep
.
你必須自己做:這個 sed 命令轉義了任何非字母數字字元,這就是
quotemeta
(IIRC)str="abc.def.ghi" escaped=$(sed 's/[^[:alnum:]]/\\&/g' <<< "$str") echo "$escaped" # => abc\.def\.ghi
- 我們希望它匹配,因為它使用原始字元串作為正則表達式
$ echo "foo bar abc-def-ghi baz" | grep "$str" foo bar abc-def-ghi baz
- 我們希望這不匹配,因為它使用了轉義字元串。
$ echo "foo bar abc-def-ghi baz" | grep "$escaped" $ echo $? 1
- 我們希望它匹配,因為它使用了轉義字元串。
$ echo "foo bar abc.def.ghi baz" | grep "$escaped" foo bar abc.def.ghi baz