如何在Unix平台上的文件中grep标签(\t) ?


当前回答

诀窍是在单引号前使用$符号。它也适用于切割和其他工具。

grep $'\t' sample.txt

其他回答

您也可以使用Perl一行程序来代替grep响应。grep - p:

perl -ne 'print if /\t/' FILENAME

一个好的选择是使用sed。

sed -n '/\t/p' file

示例(工作在bash, sh, ksh, csh,..):

[~]$ cat testfile
12 3
1 4 abc
xa      c
        a       c\2
1 23

[~]$ sed -n '/\t/p' testfile 
xa      c
        a       c\2
[~]$ sed -n '/\ta\t/p' testfile
        a       c\2

(以下答案已根据评论中的建议进行了编辑。谢谢大家)

下面是问Ubuntu的答案:

告诉grep使用由Perl定义的正则表达式(Perl拥有 \t as tab): grep -P "\t" <文件名称> . grep "\t" <文件名称> . grep "\t 使用文字制表符: grep "^V<tab>" <文件名> . grep "^V<tab> 使用printf打印制表符: Grep "$(printf '\t')"<文件名>

我从来没有设法使“\t”元字符与grep一起工作。 然而,我发现了两个替代方案:

使用<Ctrl-V> <TAB>(按Ctrl-V然后输入TAB) 使用awk: foo | awk '/\t/'

在其他答案中给出的$'\t'符号是特定于shell的——它似乎在bash和zsh中工作,但不是通用的。

注意:下面是针对fish shell的,在bash中不起作用:

在fish shell中,可以使用不带引号的\t,例如:

grep \t foo.txt

或者可以使用十六进制或unicode符号,例如:

grep \X09 foo.txt
grep \U0009 foo.txt

(这些符号对于更深奥的字符很有用)

因为这些值必须是不加引号的,所以可以将加引号的值和不加引号的值进行拼接:

grep "foo"\t"bar"