Regex 如何grep for";字符串\t字符串";?
我需要搜索一大组数据文件。我想查找包含字符串“foo\tbar\tboo”的文件。我试过这个Regex 如何grep for";字符串\t字符串";?,regex,bash,grep,Regex,Bash,Grep,我需要搜索一大组数据文件。我想查找包含字符串“foo\tbar\tboo”的文件。我试过这个 $ find . -name "foo*dat" -exec grep foo {} \; | less "miscinfo_foo" => [ "foo\tbar\tnot_foo" "miscinfo_foo", "m
$ find . -name "foo*dat" -exec grep foo {} \; | less
"miscinfo_foo" => [
"foo\tbar\tnot_foo"
"miscinfo_foo",
"miscinfo_foo" => [
"foo\tbar\tyes_foo"
"miscinfo_foo",
但是如果我这样做了
$ find . -name "foo*dat" -exec grep -E "foo\tbar" {} \;
。。。我没有输出。我也试过白鹭。我已尝试使用\\t
转义\t
,但仍然没有得到任何输出
我做错了什么
谢谢试试看
find . -name "foo*dat" -exec grep -E 'foo\\tbar' {} \;
^ ^ ^
使用单引号而不是双引号,并带有额外的反斜杠。
'
阻止bash
处理反斜杠,这样grep
将实际看到foo\\tbar
。根据您的输出,我认为您正在寻找文本反斜杠T,而不是ASCII字符9,因此将反斜杠加倍,使grep
将其匹配为文本。这里有两种效果:
\t
表示制表符\\
到\
\\t
传递给grep:
grep 'foo\\tbar'
尝试使用
'foo\\tbar'
或'
中的其他变体,而不是'
。我认为您要查找的\t
是文本,而不是转义序列,因此您需要保护文本反斜杠不受bash处理的影响。谢谢cxw。真管用!-E
没有做任何有用的事情。