我有这个文件:
# 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