在正则表达式中使用\ t似乎不适用于所有选项卡

时间:2011-02-03 21:32:31

标签: regex grep

文件的某些行似乎与正则表达式中的\ t匹配。有人会知道为什么吗?

我们来看一下你可以从http://download.geonames.org/export/dump/countryInfo.txt下载的示例文件。

$ wget http://download.geonames.org/export/dump/countryInfo.txt
--2011-02-03 16:24:08--  http://download.geonames.org/export/dump/countryInfo.txt
Resolving download.geonames.org... 178.63.52.141
Connecting to download.geonames.org|178.63.52.141|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 31204 (30K) [text/plain]
Saving to: `countryInfo.txt'

100%[===================================================================================================================================================================================================>] 31,204      75.0K/s   in 0.4s    

2011-02-03 16:24:10 (75.0 KB/s) - `countryInfo.txt' saved [31204/31204]

$ cat countryInfo.txt | grep -E 'AD.AND'
AD  AND 200 AN  Andorra Andorra la Vella    468 84000   EU  .ad EUR Euro    376 AD###   ^(?:AD)*(\d{3})$    ca  3041565 ES,FR   
sdalouche@samxps:/tmp$ cat countryInfo.txt | grep -E 'AD\tAND'
(no result)

output of vi :set list
AD^IAND^I200^IAN^IAndorra^IAndorra la Vella^I468^I84000^IEU^I.ad^IEUR^IEuro^I376^IAD###^I^(?:AD)*(\d{3})$^Ica^I3041565^IES,FR^I$

4 个答案:

答案 0 :(得分:10)

尝试使用-P选项代替-E

cat countryInfo.txt | grep -P 'AD\tAND'

这将使用Perl样式的正则表达式,它将捕获\t

$ echo -e '-\t-' | grep -E '\t'
(no result)
$ echo -e '-\t-' | grep -P '\t'
-   -

答案 1 :(得分:0)

如果我阅读了grep的文档,我没有提到\t代表制表符。请记住,并非所有正则表达式引擎都是相同的。

答案 2 :(得分:0)

选项卡不是POSIX正则表达式(grep的标准)的一部分。但是你可以生成一个像这样的文字制表符:

echo -ne "\\t"

因此,对选项卡进行grepping就像这样:

grep "AD$(echo -ne "\\t")AND"

t=$(echo -ne "\\t")
grep "AD${t}AND"

答案 3 :(得分:0)

您可以使用文字标签。在终端中按CTRL + V然后按TAB键。这将在光标点处创建一个可用于正则表达式的制表符空格。

ls | grep -E "[0-9]<CTRL+V><TAB>]"

这将搜索0到9之间的任何数字,其后面有一个制表符。