Las*_*all 180 bash regex grep posix-compliant
当我使用 (e)grep 在文件中搜索选项卡时,我使用了文字选项卡 ( ^v + <tab>)。我不能\t用作正则表达式中选项卡的替代品。使用例如 sed 这个表达式非常有效。
那么是否有可能使用非文字替代品<tab>以及非工作/未解释的背景是什么\t?
les*_*ana 253
grep 使用POSIX定义的正则表达式。无论出于何种原因,POSIX 都没有定义\t为制表符。
您有几种选择:
告诉 grep 使用由 perl 定义的正则表达式(perl 具有\t选项卡):
grep -P "\t" foo.txt
Run Code Online (Sandbox Code Playgroud)
手册页警告说这是一个“实验性”功能。至少\t似乎工作正常。但更高级的 perl 正则表达式功能可能不会。
使用 printf 为您打印制表符:
grep "$(printf '\t')" foo.txt
Run Code Online (Sandbox Code Playgroud)使用文字制表符:
grep "^V<tab>" foo.txt
Run Code Online (Sandbox Code Playgroud)
即:键入grep ",然后按ctrl+v,然后按tab,然后键入" foo.txt。按下ctrl+v终端会导致逐字输入下一个键。这意味着终端将插入一个制表符,而不是触发一些绑定到制表键的功能。
使用bash的ansi c 引用功能:
grep $'\t' foo.txt
Run Code Online (Sandbox Code Playgroud)
这不适用于所有 shell。
使用 awk:
awk '/\t/'
Run Code Online (Sandbox Code Playgroud)使用 sed:
sed -n '/\t/p'
Run Code Online (Sandbox Code Playgroud)有关POSIX 和其他系统中定义的字符类的概述,请参阅关于正则表达式的维基百科文章。
enz*_*tib 18
这不是您想要听到的确切答案,但 bash 提供了转义序列的可能用途
command | grep $'\t'
Run Code Online (Sandbox Code Playgroud)
(不要把它放在双引号中!)。