当前位置: 首页>>技术教程>>正文


如何通过终端从包含特定单词的文本文件中删除行?

, ,

问题描述

如何从包含单词”cat”和”rat”的文本文件中删除所有行?

最佳解决思路

grep方法

要创建没有与”cat”或”rat”匹配的行的文件副本,可以反向使用grep(-v)和使用whole-word选项(-w)。

grep -vwE "(cat|rat)" sourcefile > destinationfile

例如,whole-word选项确保它不匹配catsgrateful。使用shell的输出重定向(>)将其写入新文件。我们需要-E选项来启用(one|other)语法的扩展正则表达式。

sed方法

或者,要删除行in-place,可以使用sed -i

sed -i "/\b\(cat\|rat\)\b/d" filename

\b设置字边界,d操作删除与正斜杠之间的表达式匹配的行。 catrat都与(one|other)语法匹配,我们显然需要使用反斜杠进行转义。

提示:在覆盖文件之前,使用sed而不使用-i运算符来测试命令的输出。

(基于Sed – Delete a line containing a specific string)

次佳解决思路

要仅在终端中测试,请使用:

sed '/[cr]at/d' file_name

要从文件中真正删除这些行,请使用:

sed -i '/[cr]at/d' file_name

第三种解决思路

试试vim-way:

ex +"g/[cr]at/d" -scwq file.txt

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1279.html,未经允许,请勿转载。