2017-06-22 32 views
0

"['@everyone']"を含む行をすべて削除する必要があります。sed、grep、またはawkを使用してください。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 

は「-F/-v」は何を意味し、情報を取得するためにman grepをお読みください。私はそれを理解するよう

-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)、将来の同様の、しかし、同一ではない質問。説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。特に、7個以上の空白ブロックを含む行だけではなく、 '['@everyone']'を含む行をどのくらい正確に削除しますか? –

関連する問題