在UNIX中grep一个选项卡
如何在Unix平台的文件中grep制表符(\ t)? 
如果使用GNU grep,则可以使用Perl风格的正则expression式:
 $ grep -P '\t' * 
诀窍是在单引号之前使用$符号。 它也适用于剪切和其他工具。
 $ grep $'\t' sample.txt 
我从未设法使'\ t'元字符与grep一起工作。 但是我发现了两个备选解决scheme
-  使用<Ctrl-V> <TAB>(点击Ctrl-V然后input标签)
-  使用awk: foo | awk '/\t/'foo | awk '/\t/'
从Ubuntu上的这个答案 :
告诉grep使用Perl定义的正则expression式(Perl有
\t作为标签):grep -P "\t" <file name>使用文字标签字符:
grep "^V<tab>" <filename>使用
printf为您打印制表符:grep "$(printf '\t')" <filename>
一种方法是(这是与Bash)
 grep -P '\t' 
  -P打开Perl正则expression式,所以\ t将工作。 
正如用户展开说的,它可能是特定于GNU grep。 另一种方法是在shell,编辑器或terminal允许的情况下,从字面上插入一个标签。
这不是你正在寻找的,但可能适用于你的情况
 grep '[[:blank:]]' 
相当于
 grep -P '[ \t]' 
所以它会find空间和标签。
§字符类
 请注意,这是不是在我的man grep广告,但仍然有效 
 $ man grep |  grep空白| 厕所
       0 0 0
 使用echo为你插入标签grep "$(echo -e \\t)" 
  grep "$(printf '\t')"在Mac OS X上为我工作 
一个不错的select是使用“sed as grep”(正如在这个传统的sed教程中所解释的)。
 sed -n 's/pattern/&/p' file 
示例(在bash,sh,ksh,csh中工作):
 [~]$ cat testfile 12 3 1 4 abc xa c ac\2 1 23 
 [~]$ sed -n 's/\t/&/p' testfile xa c ac\2 
 [~]$ sed -n 's/\ta\t/&/p' testfile ac\2 
基本上有两种解决方法:
- 
( 推荐 )使用grep(1)支持的正则expression式语法。 现代grep(1)支持两种forms的POSIX 1003.2正则expression式语法: 基本 (过时)RE和现代 RE。 语法在分别是BSD和Linux系统的一部分的re_format(7)和regex(7)手册页中详细描述。 GNU grep(1)也支持pcre(3)库提供的与Perl兼容的RE。 在正则expression式语言中,标签符号通常由 \tprimefaces编码。 primefaces被BSD扩展正则expression式(egrep,grep -E,BSD兼容系统)以及Perl兼容的RE(pcregrep,GNUgrep -P)支持。基本的正则expression式和Linux扩展的REs显然都不支持 \t。 请参阅UNIX实用程序手册页以了解它支持哪种正则expression式语言(因此,sed(1),awk(1)和pcregrep(1)正则expression式之间的区别)。因此,在Linux上: $ grep -P '\t' FILE ...在BSD系统上: $ egrep '\t' FILE ... $ grep -E '\t' FILE ...
- 
将制表符转换为模式。 编辑脚本文件时,这很简单: # no tabs for Python please! grep -q ' ' *.py && exit 1但是,在交互式shell中工作时,可能需要依靠shell和terminalfunction来将正确的符号input到行中。 在大多数terminal上,这可以通过 Ctrl+V组合键完成,它指示terminal直接处理下一个input字符(V代表“逐字”):$ grep '<Ctrl>+<V><TAB>' FILE ...一些shell可以提供对命令排版的高级支持。 这样,在bash(1)forms $'string'被特别处理:bash$ grep $'\t' FILE ...请注意,虽然在命令行中很好,但当脚本移动到另一个平台时,这可能会产生兼容性问题。 另外,在使用特价商品时请注意报价,详情请参阅bash(1)。 对于Bourne shell(不仅如此),可以使用由printf(1)增加的命令replace来模拟相同的行为来构造适当的正则expression式: $ grep "`printf '\t'`" FILE ...
+1的方式,在ksh,破折号等工作:使用printf插入TAB:
 grep "$(printf 'BEGIN\tEND')" testfile.txt 
使用gawk,将字段分隔符设置为制表符(\ t)并检查字段数量。 如果超过1,则有标签
 awk -F"\t" 'NF>1' file 
答案更简单。 写你的grep,并在引用中键入tab键,至less在ksh中运行良好
 grep " " * 
在ksh我使用
 grep "[^I]" testfile 
使用'sed-as-grep'方法,但用个人喜好的可见字符replace选项卡是我最喜欢的方法,因为它清楚地显示了哪些文件包含请求的信息,以及它放在行内的位置:
 sed -n 's/\t/\*\*\*\*/g' file_name 
如果你想使用行/文件信息,或其他grep选项,但也想看到可见的replace为制表符,您可以实现这一点
 grep -[options] -P '\t' file_name | sed 's/\t/\*\*\*\*/g' 
举个例子:
 $ echo "A\tB\nfoo\tbar" > test $ grep -inH -P '\t' test | sed 's/\t/\*\*\*\*/g' test:1:A****B test:2:foo****bar 
编辑:显然,以上是仅用于查看文件内容来定位选项卡—如果目标是处理选项卡作为一个较大的脚本会话的一部分,这不起任何有用的目的。
 这适用于AIX。 我正在search包含JOINED<\t>ACTIVE 
 voradmin cluster status | grep JOINED$'\t'ACTIVE vorudb201 1 MEMBER(g) JOINED ACTIVE *vorucaf01 2 SECONDARY JOINED ACTIVE 
 你可能想用grep "$(echo -e '\t')" 
 只有要求是echo能够解释反斜杠转义。 
 这些替代的二进制识别方法是完全有效的 而且,我真的很喜欢那个使用awk的人,因为我不太记得单个二进制字符的合成使用。 但是,也应该可以用POSIX便携方式(即TAB = echo "@" | tr "\100" "\011" )为Shellvariables赋值,然后从POSIX便携式时尚;  (即grep“$ TAB”文件名)。 虽然这个解决scheme可以很好的与TAB配合使用,但是当赋值中使用了另一个所需的二进制值(而不是TAB字符的值为“tr”)时,它也可以很好地工作于其他二进制字符。 
在其他答案中给出的$'\ t'符号是特定于shell的 – 它似乎在bash和zsh中工作,但不是通用的。
注:以下是对于鱼壳,不能在bash中工作 :
 在鱼壳中,可以使用不带引号的\t ,例如: 
 grep \t foo.txt 
或者可以使用hex或unicode符号,例如:
 grep \X09 foo.txt grep \U0009 foo.txt 
(这些符号对于更深奥的字符是有用的)
由于这些值必须是不加引号的,所以可以通过连接将引用值和非引用值相结合:
 grep "foo"\t"bar" 
你可以input
grep \ t foo
要么
grep'\ t'foo
search文件foo中的制表符。 你也可以做其他的转义代码,虽然我只testing过\ n。 虽然这是相当耗时的,不清楚为什么你想要,在zsh中,你也可以input制表符,回到开始,grep,并用引号括住标签。
多次查找空格[[:space:]] *
grep [[:space:]] *'。''。'
会发现这样的事情:
'标签'..
 这些是单引号('),而不是双(“)。 
 这是你如何在grep中进行连接。  =  – )