如何在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"