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


当前回答

如果使用GNU grep,你可以使用perl风格的regexp:

grep -P '\t' *

其他回答

答案更简单。编写grep并在引号中输入tab键,它至少在ksh中工作得很好

grep "  " *

一个好的选择是使用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

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

你可能想使用grep "$(echo -e '\t')"

唯一的要求是echo能够解释反斜杠转义。

These alternative binary identification methods are totally functional. And, I really like the one's using awk, as I couldn't quite remember the syntaxic use with single binary chars. However, it should also be possible to assign a shell variable a value in a POSIX portable fashion (i.e. TAB=echo "@" | tr "\100" "\011"), and then employ it from there everywhere, in a POSIX portable fashion; as well (i.e grep "$TAB" filename). While this solution works well with TAB, it will also work well other binary chars, when another desired binary value is used in the assignment (instead of the value for the TAB character to 'tr').

在表达式中插入制表符的另一种方法是使用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`