从Linux中删除文件中的行,完全匹配

时间:2017-06-22 11:56:48

标签: linux awk sed grep

我需要删除所有包含" [' @ everyone']"使用sed,grep或awk。

示例:

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']

提前致谢!

4 个答案:

答案 0 :(得分:3)

我认为带有grep -F选项的-v应该是最佳选择。你不在乎那些逃脱......

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

阅读man grep获取信息,' -F / -v'的意思。

答案 1 :(得分:0)

您只需使用grep执行此操作并取消结果即可。我不知道你是否需要将它管道输入grep或者你有文件。所以这两个版本。

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

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

答案 2 :(得分:0)

awk 方法:

awk '!/\[\047@everyone\047\]/' file

输出:

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

答案 3 :(得分:-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=="[\47@everyone\47,"' file
or
awk '$8 ~/\[\47@everyone\47,/' file

两者都是单引号,后者甚至是括号。