
我有一個包含國家/地區名稱的文件,然後是該國家/地區的移動國家/地區代碼前綴,如下所示:
United Kingdom +44 ...more fields
United States Virgin Islands +1 ...more fields
我需要取得國家/地區名稱和手機前綴。因此,正規表示式的讀法如下:從行首讀取所有單詞,然後讀取以加號和多一位數字開頭的字串,然後停止。
我用 grep、cut 甚至 sed 嘗試了一些東西,但我無法得到它。
答案1
嘗試:
grep -o '^[^+]*+[0-9]\+' infile
[^+]*+
匹配所有內容,直到第一次+
找到後面跟一個或多個數字[0-9]\+
答案2
命令列:
$ perl -lne 'print /^(.*?\+\d+)/' input.txt
這將從輸入中獲取所需的資訊。
在職的:
/^(.*?\+\d+)/
正規表示式應提取所有內容,直到第一次出現加號,後面跟著至少一個數字符號。BOL
由於這是透過插入符號連接到的^
,因此顯然只能發生一次匹配。- 匹配被傳遞給
print
函數。 -lne
options 用於執行input.file 每一行的選項Perl
中給出的程式碼。除非特別要求,否則 perl 不會列印任何內容。-e
-n
輸出:
United Kingdom +44
United States Virgin Islands +1
答案3
自從你說 空間是文件中使用的分隔符,您應該能夠使用
cut -d ' ' -f 1-5 filename
從文件中提取前五列。
對於給定的數據,這會產生
United Kingdom +44
United States Virgin Islands +1
……但我假設這只是運氣,因為一個名稱包含兩個以上單字的國家將跨越多個領域(而不僅僅是兩個)。
一種更可靠的方法,用於sed
刪除每行第一組數字之後的所有內容(即國家代碼之後的所有內容):
sed 's/\([[:digit:]][[:digit:]]*\).*/\1/' filename
或者,
sed 's/\([[:digit:]]\{1,\}\).*/\1/' filename
或者,使用-E
擴展正則表達式代替,
sed -E 's/([[:digit:]]+).*/\1/' filename