2016-02-20 63 views
-3

很難制定一個問題,最好我會舉例說明。 TXT文件有這些行如果它有多個匹配項,Grep字符串

city:state:address 
city:state 
city: 

我需要提取的字符串,其中

a) only one occurrences of : 
b) only one occurrences of : and has value after : 
c) two occurrences of : 

,並把這些字符串的差異和文件,所以一個文件將包含與秒所有字符串與city:state第三個city:

注意:文件有很多這樣的字符串。不一定要在一個命令中創建三個文件。這將是足夠的一個命令,我可以定義多少個:字符串應該包含。

回答

3

使用grep和管道的這些調用輸出到不同的文件:

  1. grep -E "^[^:]+:\s*$" file.txt
  2. grep -E "^[^:]+:[^:]+$" file.txt
  3. grep -E "^[^:]+:[^:]+:.*$" file.txt

它尋找的東西是不是:與正則表達式[^:]+ 。它在開始和結束時使用^$來匹配整個輸入行。

3

這是awk的工作,而不是grep。所有你需要的是:

awk -F':' ' 
    NF==3 { print > "file_c"; next } 
    { print > ($2=="" ? "file_a" : "file_b") } 
' file 

這將創建所有文件,你想在你的輸入文件的一次通過。

如果您有更多的字段和更多的規則,請將它們全寫下來,以便它們互斥,例如,你可以實現上述爲:

NF==3   { print > "file_c" } 
    NF==2 && $2=="" { print > "file_a" } 
    NF==2 && $2!="" { print > "file_b" } 
相關問題