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

Per*_*onX 88 command-line text-processing

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

ger*_*ijk 129

grep 方法

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

grep -vwE "(cat|rat)" sourcefile > destinationfile
Run Code Online (Sandbox Code Playgroud)

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

sed 方法

或者,要删除就地行,可以使用sed -i

sed -i "/\b\(cat\|rat\)\b/d" filename
Run Code Online (Sandbox Code Playgroud)

\b套字边界和d操作删除匹配斜杠之间表达的行。cat并且rat都与(one|other)我们显然需要用反斜杠转义的语法匹配。

提示:在覆盖文件之前使用sed不带-i操作符来测试命令的输出。

(基于Sed - 删除包含特定字符串的行


Rad*_*anu 19

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

sed '/[cr]at/d' file_name
Run Code Online (Sandbox Code Playgroud)

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

sed -i '/[cr]at/d' file_name
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 6

尝试使用ex命令(Vi/Vim 的一部分):

ex +"g/[cr]at/d" -scwq file.txt
Run Code Online (Sandbox Code Playgroud)

上述工具优于其他工具,例如sed由于其非标准 FreeBSD -i(就地)扩展,并且可能在其他操作系统上不可用。其次sed小号tream ED itor,而不是一个文件编辑器