我的文件可能包含这样的行。
A B
//由标签分隔
如果找到该行,我想将true
返回终端,如果找不到该值,则false
。
当我这样做的时候
grep 'A' 'file.tsv'
,返回行(不是true / false)
但是
grep 'A \t B' "File.tsv"
或
grep 'A \\t B' "File.tsv"
或
grep 'A\tB'
或
grep 'A<TAB>B'
//按标签按钮
不会返回任何内容。
如何使用grep。
搜索制表符分隔值如何使用grep返回布尔值。
答案 0 :(得分:28)
使用文字 Tab 字符,而不是\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 :(得分:16)
两种方法: 使用-P选项:
grep -P 'A\tB' "File.tsv"
首先输入ctrl + v并输入tab
grep 'A B' "File.tsv"
答案 2 :(得分:12)
这是一种使用文字制表符作为其值创建变量的便捷方法:
TAB=`echo -e "\t"`
然后,您可以按如下方式使用它:
grep "A${TAB}B" File.tsv
这样,就不需要文字标签了。请注意,使用此方法,您需要在模式字符串周围使用双引号(而不是单引号),否则不会替换变量引用。