2011-02-03 3 views
7

ファイルの行の一部が正規表現で\ tと一致していないようです。なぜ誰かがアイデアを持っていますか?正規表現で 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 
[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

代わりに\ s +を使用しない理由は何ですか? –

+1

まあ、ファイルはタブで区切られているので、\ sを使ってマッチすれば、Andorra la Vellaの項目は1つだけです。 –

答えて

10

代わり-E-Pオプションを使用してみてください:

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

これは\tをキャッチするのPerlスタイルの正規表現を使用します。

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

ありがとう。それは標準正規表現が\ tをサポートしていないことを意味しますか? –

+1

@Sam Dalouche: "標準正規表現"の定義はどうですか? –

+1

@ブライアン:サミは確率的にPOSIXを参照しています – user123444555621

0

私はgrepのためのドキュメントを読むと、私は\tタブを表しては言及を見ていません。すべての正規表現エンジンが同じではないことに注意してください。

0

タブは、POSIX正規表現(grepの標準)の一部ではありません。しかし、あなたは、このようなリテラルのタブ文字を生成することができますので、

echo -ne "\\t" 

を、タブのgrepをすると、このように動作します:

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

または

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

あなただけのリテラルのタブを使用することができます。ターミナルでCTRL + Vを押しながらTabキーを押します。これにより、正規表現で使用できるカーソルポイントに空白のタブが作成されます。

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

これは、直後のタブ文字を使用して0〜9の任意の数字を検索します。

関連する問題