问题描述
如何从包含单词”cat”和”rat”的文本文件中删除所有行?
最佳解决思路
grep
方法
要创建没有与”cat”或”rat”匹配的行的文件副本,可以反向使用grep
(-v
)和使用whole-word选项(-w
)。
grep -vwE "(cat|rat)" sourcefile > destinationfile
例如,whole-word选项确保它不匹配cats
或grateful
。使用shell的输出重定向(>
)将其写入新文件。我们需要-E
选项来启用(one|other)
语法的扩展正则表达式。
sed
方法
或者,要删除行in-place,可以使用sed -i
:
sed -i "/\b\(cat\|rat\)\b/d" filename
\b
设置字边界,d
操作删除与正斜杠之间的表达式匹配的行。 cat
和rat
都与(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