2016-08-13 28 views
1

我有域的列表,但是一些用於連接的形式複製:我如何嚴格grep兩個時期(。)?

boy.or.uk 
    man.me.uk 
    admin.man.me.uk 
    root.man.me.uk 
    girl.co.uk 
    woman.co.uk 
    mail.woman.co.uk 
    www.woman.co.uk 
    youtube.co.uk 

你可以看到woman.co.uk和man.me.uk多次發生。我想過濾出來,然後繼續。

boy.or.uk 
    man.me.uk 
    girl.co.uk 
    woman.co.uk 
    youtube.co.uk 

這是我設法達到的最接近answer。這個問題包括兩個階段以上的所有事情。我基本上是在尋找一個確保以.uk結尾的bash腳本,並且還會過濾掉子域或嚴格限制兩個時間段的內容。由於

回答

0

隨着SED和BRE:

sed 's/^\(*\).*\.\(.*\..*\.\uk)/\1\2/' file | sort -u 

編輯:

新增的.uk過濾器。

4

我會像這樣的東西去:

grep -E "^([^.]+\.){2}uk$" <infile> | sort -u 

grep -E正則表達式僅匹配線,通過在uk結束兩個時段分開3個字,並sort -u將確保其唯一性。

+1

還增加了'^ [^。] + \。[^。] + \。uk $'作爲OP也提到了'確保行以.uk'結尾的問題細節 – Sundeep

+0

非常正確,謝謝。 –

+0

括號內的時間段是否應該轉義[^ \。]? –

1

你可以用awk代替:以上

awk -F'.' '(NF==3) && ($NF=="uk")' file 

確保有3個. - 分隔字符串(如將輸入給定發生2個. S),最後一個是uk。如果你想確保其唯一性,這只是一個附加的調整:

awk -F'.' '(NF==3) && ($NF=="uk") && !seen[$0]++' file 
+0

如果輸入中包含一行'csc.cam.ac.uk',這將不會打印出來..也許這是op所說的要求'或者嚴格限定爲2個週期的要求.'但我不確定這是他們打算做的。 – sjsam

+0

是的,這正是要求,只打印恰好包含2個句點並以'uk'結尾的行。請參閱OP問題中的預期輸出。 –

+1

感謝您的回覆。出於好奇,你會如何去了解@sjsam的要求,即如果列表包含'csc.cam.ac.uk'並且你想在結果中包含'cam.ac.uk'? – kwiha