26

我有一个可能包含这样一行的文件。

A B//由制表符分隔

如果找到该行,如果未找到该值,我想返回true终端。false

当我这样做时 grep 'A' 'file.tsv',它返回到行(不是真/假)但是

grep 'A \t B' "File.tsv"

或者

 grep 'A \\t B' "File.tsv"

或者

grep 'A\tB' 

或者

grep 'A<TAB>B'//按下标签按钮

不返回任何东西。

如何使用 grep 搜索制表符分隔值。

如何使用 grep 返回布尔值。

4

3 回答 3

30

使用文字Tab字符,而不是\t转义符。(您可能需要先按Ctrl+ V。)另外,grep不是 Perl 6(或带有/x修饰符的 Perl 5);空格很重要,并且会按字面意思进行匹配,因此即使使用 周围的额外空格也不会,除非空格实际上在原版中\tA \t B\t

至于返回值,要知道你从程序中得到三种不同的响应:标准输出、标准错误和退出代码。后者为 0 表示成功,非 0 表示某些错误(对于大多数进行匹配的程序,1 表示未找到,2 及以上表示某种使用错误)。grep在传统的 Unix 中,如果您只需要退出代码,则可以重定向输出;使用 GNU grep,您可以改用该-q选项,但请注意,该选项不可移植。传统和 GNU 都grep允许-s抑制标准错误,但两者在处理方式上存在一些差异;最便携的是grep PATTERN FILE >/dev/null 2>&1

于 2012-04-06T01:44:08.307 回答
18

两种方法:使用 -P 选项:

grep -P 'A\tB' "File.tsv"

先输入ctrl+v再输入tab

grep 'A  B' "File.tsv"
于 2012-04-06T02:14:36.260 回答
12

这是创建一个以文字制表符作为其值的变量的便捷方法:

TAB=`echo -e "\t"`

然后,您可以按如下方式使用它:

grep "A${TAB}B" File.tsv

这样,就不需要文字标签。请注意,使用这种方法,您需要在模式字符串周围使用双引号(而不是单引号),否则变量引用将不会被替换。

于 2014-08-26T20:22:11.613 回答