如何在Unix平台上的文件中grep标签(\t) ?
当前回答
你可以打字 Grep \t foo 或
grep '\t' foo
在文件foo中搜索制表符。您可能还可以使用其他转义代码,尽管我只测试了\n。虽然这相当耗时,而且不清楚为什么要这样做,但在zsh中,您还可以键入制表符,回到开头,grep并将制表符用引号括起来。
其他回答
这对于AIX很有效。我正在搜索包含连接<\t>ACTIVE的行
voradmin cluster status | grep JOINED$'\t'ACTIVE
vorudb201 1 MEMBER(g) JOINED ACTIVE
*vorucaf01 2 SECONDARY JOINED ACTIVE
在表达式中插入制表符的另一种方法是使用Bash中不太为人所知的$'\t'引号:
grep $'foo\tbar' # matches eg. 'foo<tab>bar'
(注意,如果你匹配固定字符串,你可以使用-F模式。)
有时使用变量可以使符号更易于阅读和管理:
tab=$'\t' # `tab=$(printf '\t')` in POSIX
id='[[:digit:]]\+'
name='[[:alpha:]_][[:alnum:]_-]*'
grep "$name$tab$id" # matches eg. `bob2<tab>323`
您也可以使用Perl一行程序来代替grep响应。grep - p:
perl -ne 'print if /\t/' FILENAME
如果使用GNU grep,你可以使用perl风格的regexp:
grep -P '\t' *
一个好的选择是使用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
(以下答案已根据评论中的建议进行了编辑。谢谢大家)