Использование \ t в регулярном выражении, похоже, не работает со всеми вкладками - PullRequest
7 голосов
/ 04 февраля 2011

Некоторые строки файла не совпадают с \ 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 ]

10 голосов
/ 04 февраля 2011

Попробуйте использовать параметр -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'
-   -
0 голосов
/ 26 сентября 2011

Вы можете просто использовать буквенную вкладку. Находясь в терминале, нажмите CTRL + V, а затем нажмите клавишу TAB. Это сделает пробел табуляции в точке курсора, который можно использовать в вашем регулярном выражении.

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

Будет выполнен поиск любого числа от 0 до 9 с символом табуляции сразу после него.

0 голосов
/ 04 февраля 2011

Вкладки не являются частью регулярных выражений POSIX (стандарт для grep).Но вы можете создать буквальный символ табуляции следующим образом:

echo -ne "\\t"

Итак, поиск для табуляции работает так:

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

или

t=$(echo -ne "\\t")
grep "AD${t}AND"
0 голосов
/ 04 февраля 2011

Если я читаю документацию по grep, я не вижу упоминания о том, что \t обозначает таб.Помните, что не все механизмы регулярных выражений одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...