2017-06-22 75 views
0

我需要使用sed,grep或awk刪除包含「['@everyone']」的所有行。在Linux中刪除文件中的行,完全匹配

例子:

USER: user1 - (327287311424072921) - No - ['@everyone'] 
USER: user2 - (323639467155241152) - No - ['@everyone'] 
USER: user3 - (213739640403696966) - No - ['@everyone', 'OK'] 
USER: user4 - (211732640103626928) - No - ['@everyone', 'Group1'] 

期望的結果:

USER: user3 - (213739640403696966) - No - ['@everyone', 'OK'] 
USER: user4 - (211732640103626928) - No - ['@everyone', 'Group1'] 

在此先感謝!

+3

分享你試圖達到這個理想的結果嗎? – Chandru

回答

0

AWK方法:

awk '!/\[\[email protected]\047\]/' file 

輸出:

USER: user3 - (213739640403696966) - No - ['@everyone', 'OK'] 
USER: user4 - (211732640103626928) - No - ['@everyone', 'Group1'] 
0

你可以簡單地用grep來做,並取消結果。我不知道你是否需要將它傳遞給grep或者如果你有一個文件。所以這裏有兩個版本。

cat file.txt|grep -v "\['@everyone'\]" 

grep -v "\['@everyone'\]" test.txt 
3

我認爲日在grep-F-v選項應該是最好的選擇。你不關心那些逃逸......

grep -vF "['@everyone']" file 

man grep得到信息,什麼是「-F/-v」的意思。

-1
awk 'NF>8' file 

USER: user3 - (213739640403696966) - No - ['@everyone', 'OK'] 
USER: user4 - (211732640103626928) - No - ['@everyone', 'Group1'] 

此處的主要問題,按我的理解,就是要擺脫包含[「@everyone」]行 的,但是,這並不意味着我必須在這點。當然,那麼我必須得到與其併發症有關的單引號。

這就是爲什麼我做了我的第一個建議,另一種方式是:

awk '!/user1|user2/' file 

但是,如果有人堅持有包括[「@everyone」]你可以把它像這樣:

awk '$8=="[\[email protected]\47,"' file 
or 
awk '$8 ~/\[\[email protected]\47,/' file 

兩個都逃脫了單引號,後者甚至是括號。

+0

感謝您使用此代碼段,它可能會提供一些即時幫助。通過展示*爲什麼*這是一個很好的解決方案,對未來的讀者會有更好的解決方案,這將爲它的教育價值提供一個合適的解釋[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的問題。請編輯您的答案以添加解釋,並指出適用的限制和假設。特別是,如何刪除只包含'['@everyone']'的行,而不僅僅是那些包含7個或更多空白塊的行? –