如何从文本文件中删除所有包含单词“cat”和“rat”的行?
答案1
grep
方法
要创建不包含与“cat”或“rat”匹配的行的文件副本,可以使用grep
反向 ( -v
) 和全词选项 ( -w
)。
grep -vwE "(cat|rat)" sourcefile > destinationfile
全词选项确保它不会匹配cats
或grateful
例如。shell 的输出重定向用于 ( >
) 将其写入新文件。我们需要该-E
选项来为语法启用扩展正则表达式(one|other)
。
sed
方法
或者,要删除现有的行,可以使用sed -i
:
sed -i "/\b\(cat\|rat\)\b/d" filename
设置\b
单词边界,d
操作删除与正斜杠之间的表达式匹配的行。cat
并且rat
都与(one|other)
我们显然需要用反斜杠转义的语法相匹配。
提示:在覆盖文件之前,请使用sed
不带-i
运算符来测试命令的输出。
(基于Sed——删除包含特定字符串的行)
答案2
仅在终端中测试,请使用:
sed '/[cr]at/d' file_name
要真正从文件中删除这些行,请使用:
sed -i '/[cr]at/d' file_name
答案3
尝试使用ex
命令(Vi/Vim 的一部分):
ex +"g/[cr]at/d" -scwq file.txt
上述方法比其他工具更具优势,sed
例如非标准 FreeBSD -i
(就地)扩展在其他操作系统上可能无法使用。其次sed
是年代流EDitor,不是文件编辑器。
答案4
使用 awk 排除包含特定单词的行:
$ awk '!/\<(cat|rat)\>/{print $0}' ./input.txt
awk 语法:
!/regex/
仅打印与正则表达式不匹配的行。|
替代运算符,用于指定替代项。(...)
分组,例如对交替运算符进行分组。\<
匹配单词开头的空字符串。\>
匹配单词末尾的空字符串。{...}
行動辯錄。