Perl 有一个函数,metaquote()
用于转义正则表达式的所有特殊字符。
是否有等效的技术egrep
?
示例:如果我正在搜索字符串abc.def.ghi
,我需要记住手动转义点,例如,abc\.def\.ghi
我假设egrep
没有内置模式/功能来执行此操作,但我愿意在 Perl/sed/awk 中使用“one-liners”来metaquote()
模拟egrep
.另外,Perl可能可以在简单的情况下工作,但和metaquote()
之间的正则表达式语法是不同的。egrep
perl
答案1
使用-F
选项将grep
模式视为固定字符串:
grep -F 'abc.def.ghi' <file
另请注意,您不需要调用egrep
.
答案2
你必须自己做:这个 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