使用grep搜索选项卡

使用grep搜索选项卡,grep,Grep,我有一个文件可能包含这样一行 ab//由选项卡分隔 如果找到行,我想将true返回到终端;如果找不到值,我想将false返回到终端 当我这样做的时候 grep'A''file.tsv',它返回到第行(非真/假) 但是 或 或 或 grep'AB'//按tab按钮 不返回任何内容 如何使用grep搜索选项卡分隔的值 如何使用grep返回布尔值。使用文本制表符,而不是\t转义符。(您可能需要先按Ctrl+V。)另外,grep不是perl6(或带有/x修饰符的perl5);空格是有意义的,并且会按字面

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

ab
//由选项卡分隔

如果找到行,我想将
true
返回到终端;如果找不到值,我想将
false
返回到终端

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

grep'AB'
//按tab按钮

不返回任何内容

如何使用grep搜索选项卡分隔的值

如何使用grep返回布尔值。

使用文本制表符,而不是
\t
转义符。(您可能需要先按Ctrl+V。)另外,
grep
不是perl6(或带有
/x
修饰符的perl5);空格是有意义的,并且会按字面意思进行匹配,因此即使
\t
工作
A\t B
\t
周围的额外空格也不会匹配,除非这些空格实际上在原始文件中

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

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

grep -P 'A\tB' "File.tsv"
首先输入ctrl+v,然后输入tab

grep 'A  B' "File.tsv"

下面是一种创建变量的简便方法,该变量的值为文字选项卡:

TAB=`echo -e "\t"`
然后,您可以按如下方式使用它:

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

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

还要注意,像
\t
这样的转义符可能在最近的GNU
grep
中使用
-p
选项启用PCRE正则表达式。即使是文字制表符也不起作用。当我按下制表符时,会出现一个负号。。但它不会搜索“像某物一样的负号”听起来有问题。在
bash
中,
选项卡根据终端设置自动鸣叫/闪烁屏幕
Ctrl
+
V
后跟
Tab
插入制表符。你是直接在终端上输入,还是在某个编辑器中输入(如果是后者,是哪个?),我是直接在终端上输入。使用MacOSX。顺便说一句,如果我必须将这个grep作为shell命令嵌入到PHP脚本中,我是否需要在PHP脚本中按CTRL+V和Tab键呢?我也在osx(Lion)上,并且使用标准终端。另一方面,如果要将其嵌入脚本中,则可能要使用编辑器,并且如何输入文本制表符取决于编辑器(在
vi
/
vim
插入模式下,选项卡将自行工作;根据该模式的贪婪程度,在Emacs中,您可能需要
Ctrl
+
Q
,以防止选项卡重新插入整行;一些GUI编辑器可能根本不允许进入选项卡,而是将其用作常规GUI小部件焦点更改)。我喜欢-P开关,打开“正确的”Perl样式的RegExp并搜索制表符。请注意,这可能会运行较慢,或者在某些系统上根本不会运行。如果您“怀疑”有制表符,但不确定,
grep-P“a\s+B”
应该会把A和B之间的所有制表符和空格都占满,这可能是您想要的。我建议您使用
grep$'A\tB'
,您的回答发现这对osx特别有用,因为我不能使用
grep-P'\t'*
grep 'A  B' "File.tsv"
TAB=`echo -e "\t"`
grep "A${TAB}B" File.tsv