如何使用 grep /egrep 搜索两个引号之间的所有制表符

如何使用 grep /egrep 搜索两个引号之间的所有制表符

我正在 bash 中使用 grep /egrep 查找两个引号之间的所有制表符。

我试过

grep -r . -e "\".*\t.*\""
grep -r . -e "\".*\\t.*\""
grep -r . -e "\".*\\\\t.*\""
grep -r . -e '\".*\t.*\"'
grep -r . -e '\".*\\t.*\"'
grep -r . -e '".*\t.*"'
grep -r . -e '".*\\t.*"'

但我没有得到想要的结果。以下greps 产生所有带有 a 的行\t

grep -r . -e "\".*\\\\t.*\""
grep -r . -e '\".*\\t.*\"'
grep -r . -e '".*\\t.*"'

以下greps 产生所有带有 a 的行t

grep -r . -e "\".*\t.*\""
grep -r . -e "\".*\\t.*\""
grep -r . -e '".*\t.*"'
grep -r . -e '\".*\t.*\"'

但这些都没有寻找真正的制表机。我做错了什么?

答案1

GNU grep(我假设您正在使用它)默认情况下不知道\t作为选项卡。在 POSIX 正则表达式中,\t会匹配文字t, 并\\t会匹配\t

要将文本制表符与 POSIX 正则表达式匹配,请在表达式中插入一个制表符:

grep -r $'".*\t.*"' .

这用于$'...'bash字符串中的转义序列扩展为它们在 C 语言中的相应含义。

-P如果您在 GNU 中启用类似 Perl 的正则表达式 (PCRE) grep,它将识别\t为表达式中的制表符:

grep -P -r '".*\t.*"' .

另请注意,您的表达式将匹配

"hello" <tab> "world"

相关内容