2011-02-03 13 views
7

Tüm sekmelerle çalışma görünmüyor Bir dosyanın bazı satırları \ re ile harfe uymuyor gibi görünüyor. Neden bir fikri olur mu?Bir regex'de t kullanma

http://download.geonames.org/export/dump/countryInfo.txt'dan yükleyebileceğiniz örnek dosyayı alalım.

$ 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 
[email protected]:/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$ 
+0

Bunun yerine herhangi bir neden \ s + kullanmamak? –

+1

iyi, dosya sekmeli ayrılır, bu yüzden \ s kullanarak eşleşirse, sadece bir alan olması beklenen Andorra la Vella için farklı girişler alacağım .. –

cevap

10

-E yerine -P seçeneğini kullanmayı deneyin:

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

Bu

Perl tarzı düzenli ifadeler kullanacak, \t yakalayacak olan. Ben grep belgelerine okursanız

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

Teşekkürler. Standart regex'in desteklemediği anlamına mı geliyor? –

+1

@Sami Dalouche: "standart regex" tanımınız nedir? –

+1

@Bryan: Sami, POSIX'i referans alan probal – user123444555621

0

Ben \t sekme temsil bahsedilmiyor görüyoruz. Unutmayın, tüm normal ifade motorları aynı değildir.

0

Sekmeler, POSIX normal ifadelerinin (grep standardı) bir parçası değildir.

echo -ne "\\t" 

Yani, bir sekme için grepping böyle çalışır

:

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

veya

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

sadece bir hazır sekmeyi kullanabilirsiniz Ama böyle bir hazır sekme karakteri üretebilir . Terminalde iken CTRL + V tuşlarına basın ve ardından SEKME tuşuna basın. Bu, imleç noktasında düzenli ifadenizde kullanılabilecek bir sekme boşluk yapar.

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

Bu, 0'dan 9'a kadar herhangi bir sayı için hemen sonra bir sekme karakteri ile arayacaktır.