如何转义egrep 的元字符,例如Perl 中的元引号?

如何转义egrep 的元字符,例如Perl 中的元引号?

Perl 有一个函数,metaquote()用于转义正则表达式的所有特殊字符。

是否有等效的技术egrep

示例:如果我正在搜索字符串abc.def.ghi,我需要记住手动转义点,例如,abc\.def\.ghi

我假设egrep没有内置模式/功能来执行此操作,但我愿意在 Perl/sed/awk 中使用“one-liners”来metaquote()模拟egrep.另外,Perl可能可以在简单的情况下工作,但和metaquote()之间的正则表达式语法是不同的。egrepperl

答案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
  1. 我们希望它能够匹配,因为它使用原始字符串作为正则表达式

    $ echo "foo bar abc-def-ghi baz" | grep "$str"
    foo bar abc-def-ghi baz
    
  2. 我们预计这不会匹配,因为它使用转义字符串。

    $ echo "foo bar abc-def-ghi baz" | grep "$escaped"
    $ echo $?
    1
    
  3. 我们希望它匹配,因为它使用转义字符串。

    $ echo "foo bar abc.def.ghi baz" | grep "$escaped"
    foo bar abc.def.ghi baz
    

相关内容