如何用sed \ awk从文件中删除行?

时间:2012-11-27 08:18:09

标签: linux bash sed awk freebsd

我有文件,有行,包含带网络掩码的ip A.B.C.D / 24 w.x.y.z / 32 等等 如何删除删除特定行? 我正在使用

sed -ie "s#a.b.c.d/24##g" %filname%

但删除后是文件中的空字符串。

它应该在脚本内运行,ip作为参数,也可以在sh下的freebsd中运行。

4 个答案:

答案 0 :(得分:6)

Sed解决方案

 sed -i '/<pattern-to-match-with-proper-escape>/d' data.txt 

-i选项将更改原始文件。

Awk解决方案

awk '!/<pattern-to-match-with-proper-escape>/' data.txt

答案 1 :(得分:4)

使用sed:

sed -i '\|a.b.c.d/24|d' file

命令行arg: 对于输入是命令行参数,比如说第一个参数($ 1):

sed -i "\|$1|d" file

将$ 1替换为适当的参数编号。

答案 2 :(得分:2)

你应该使用d(删除)而不是g。也不要使用s(替换)。

sed -ie '/a.b.c.d\/24/d' %filename%

在脚本中你应该以这种方式使用它

IP=$1
IPA=${IP////\\/}
sed -i /"${IPA}"/d %filename%

应该以这种方式调用脚本参数:

./script.sh a.b.c.d/24

答案 3 :(得分:1)

perl -i -lne 'print unless(/a.b.c.d\/24/)' your_file

或在awk中,如果您不想进行就地编辑:

 awk '$0!~/a.b.c.d\/24/' your_file