Grep

如何從 Perl 中轉義 egrep 的元字元,如元引用?

  • November 12, 2015

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
  1. 我們希望它匹配,因為它使用原始字元串作為正則表達式
$ echo "foo bar abc-def-ghi baz" | grep "$str"
foo bar abc-def-ghi baz
  1. 我們希望這不匹配,因為它使用了轉義字元串。
$ echo "foo bar abc-def-ghi baz" | grep "$escaped"
$ echo $?
1
  1. 我們希望它匹配,因為它使用了轉義字元串。
$ echo "foo bar abc.def.ghi baz" | grep "$escaped"
foo bar abc.def.ghi baz

引用自:https://unix.stackexchange.com/questions/242480