2012-04-06 55 views
21

搜索选项卡我有可能包含这样的行的文件。使用grep

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。

+2

我建议'grep $'A \ tB'',来自[这里]的答案(http://stackoverflow.com/questions/9954515/grep-find-lines-that-c​​ontains-t) – sleepsort 2013-11-03 08:19:44

回答

25

使用文字选项卡字符,而不是\t转义。 (您可能需要按Ctrl + V第一个)。另外,grep不是Perl 6(或带有/x修饰符的Perl 5)。空间是显著,并会按字面匹配,所以即使\t工作A \t B\t周围多余的空格不会,除非空间在原始居然还有。

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

+1

另请注意像'\ t' *这样的转义*可以在最近的GNU'grep'中使用'-P'选项来启用PCRE正则表达式。 – geekosaur 2012-04-06 01:45:44

+0

即使是文字标签字符也不起作用。当我按下制表符时,会出现一个类似于某个东西的减号......但它不搜索 – Ank 2012-04-06 01:48:14

+2

“某种类似于某个减号”听起来有误。在'bash'中,'Tab'自动根据终端设置发出蜂鸣声/闪烁屏幕; 'Ctrl' +'V'后跟'Tab'插入一个制表符。你是直接在终端上,还是在某个编辑器(如果是后者,哪一个?)输入这个信息。 – geekosaur 2012-04-06 01:53:53

14

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

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

+ V先输入Ctrl键并输入标签

grep 'A B' "File.tsv" 
+0

我喜欢-P开关,打开“正确的”Perl风格RegExp并在Tab字符上搜索。请注意,这可能会在某些系统上运行速度较慢或根本不运行。如果你'怀疑'有一个标签,但不确定,'grep -P“A \ s + B”'应该吞噬A和B之间的所有标签和空格,并且可能是你想要的。 – 2012-08-08 14:08:07

7

下面是创建一个变量,文字标签作为一种方便的方法了值:

TAB=`echo -e "\t"` 

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

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

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

+1

发现这对osx特别有用,因为我不能使用'grep -P'\ t'*' – 2015-12-07 19:57:47