当前位置: 首页>>技术问答>>正文


如何在不使用文字标签的情况下查看标签,为什么不能正常工作?

, , , ,

问题描述

当我使用(e)grep搜索文件中的选项卡时,使用litteral选项卡(^v + <tab>)。我无法使用\t替代正则表达式中的选项卡。例如, sed这个表达效果很好。

那么是否有可能为<tab>使用non-litteral替代品,以及非工作/未解释的\t的背景是什么?

最佳解决办法

grep使用POSIX定义的正则表达式。由于POSIX没有将\t定义为选项卡的原因。

你有几个选择:

  • 告诉grep使用perl定义的正则表达式(perl有\t作为标签):

    grep -P "\t" foo.txt
    
  • 使用printf为您打印制表符:

    grep "$(printf '\t')" foo.txt
    
  • 或者,正如您已经提到的那样,使用字面标签字符:

    grep "^V<tab>" foo.txt
    

    即:键入grep ",然后按ctrl+v,然后按tab,然后键入" foo.txt。在shell中按ctrl+v会导致按字面输入下一个键。这意味着shell将插入一个制表符而不是触发某个绑定到Tab键的函数。

  • 如果你使用bash,你可以使用ansi c quoting功能:

    grep $'\t' foo.txt
    

请参阅wikipedia article about regular expressions以了解POSIX和其他系统中定义的字符类的概述。

次佳解决办法

这不完全是您想要听到的答案,但可能使用的转义序列由bash提供

command | grep $'\t'

(不要把它放进双引号!)。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/541.html,未经允许,请勿转载。