sed命令删除与模式匹配的行在我的情况下不起作用

时间:2018-11-01 12:40:18

标签: awk sed

这些是我的文件/ etc / sysconfig / network-scripts / route-eth0的内容:

192.168.1.12/32 via 172.16.1.60
192.168.1.0/24 via 172.16.60.1

我正在使用以下sed命令删除一行:

sed  -i  '#192.168.1.0/24 via 172.16.60.1#d'   /etc/sysconfig/network-scripts/route-eth0

但是匹配的行(在本例中为第2行)没有被删除。有见识吗?

注意:我在sed命令中使用#(哈希符号)作为分隔符,因为/(正斜杠符号)是我的模式的一部分。

4 个答案:

答案 0 :(得分:3)

如果在表达式中转义/字符是一个问题,则可以使用awk

awk -v search='192.168.1.0/24 via 172.16.60.1' '$0 != search' file > file.tmp \
&& mv file.tmp file

或用gawk替换:

gawk -i inplace -v search='192.168.1.0/24 via 172.16.60.1' '$0 != search' file

答案 1 :(得分:3)

gnu sed支持REGEX模式作为地址。您可以使用任何喜欢的定界符,就像s(替换)

您可以:

sed '\%pat%d'
sed '\#pat#d'
sed '\@pat@d'

也就是说,您只需对代码中的第一个#进行转义,您的命令就会起作用。

答案 2 :(得分:2)

请您尝试以下。

grep -v '192\.168\.1\.0/24 via 172\.16\.60\.1' Input_file > temp_file && mv temp_file Input_file

使用awk

awk '!/192\.168\.1\.0\/24 via 172\.16\.60\.1/' Input_file > temp_file && mv temp_file Input_file

答案 3 :(得分:2)

使用GNU sed:首先将npm list --depth=0替换为#