7

我有文件,带有行,包含带有网络掩码 abcd/24 wxyz/32 等的 IP 如何删除删除特定行?我在用着

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

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

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

4

4 回答 4

14

sed解决方案

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

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

awk 解决方案

awk '!/<pattern-to-match-with-proper-escape>/' data.txt
于 2012-11-27T08:22:46.000 回答
6

使用 sed:

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

命令行参数: 对于作为命令行参数的输入,例如第一个参数($1):

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

根据您的情况,将 $1 替换为适当的参数编号。

于 2012-11-27T08:30:31.147 回答
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
于 2012-11-27T08:27:13.177 回答
1
perl -i -lne 'print unless(/a.b.c.d\/24/)' your_file

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

 awk '$0!~/a.b.c.d\/24/' your_file
于 2012-11-27T11:05:23.683 回答