删除 shell 脚本中的行

删除 shell 脚本中的行

我有这个文件:

# more file.txt
 2c2
lns-ld-wall-01-t2 old:261,260
4c4
Prive_ORANGE old:258,259

我需要删除像这一行 2c2和这一行这样 的所有行4c4。我该如何在 shell 脚本中执行此操作?

答案1

这应该有效:

sed 's/.*[0-9]c[0-9].*//g' file.txt

然而,正如评论中提到的,上面的命令不会删除完整的行,所以更好的方法是d在匹配的行上使用该命令:

sed '/[0-9]c[0-9]/d' file.txt

或者使用 GNU 的扩展正则表达式sed-E是与 BSD* 兼容的首选标志sed):

sed -E '/^[[:blank:]]*[0-9]+[a-z]+[0-9]/d' file

答案2

grep(和/egrep或现代的等价物grep -E)是你的朋友:

man grep

查看-v选项。

这里:

grep -Exv '[[:blank:]]*[0-9]+c[0-9]+[[:blank:]]*' file

将过滤掉c由十进制数字和可选空格包围的行。

答案3

采取perl方式。

测试:

perl -ne 's/^\s*[0-9]+c[0-9]+$//g; if ($_ !~ /^$/) {print }' file.txt

更改文件file.txt

perl -ne 's/^\s*[0-9]+c[0-9]+$//g; if ($_ !~ /^$/) {print }' -i file.txt

相关内容