这些是我的文件/ 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命令中使用#(哈希符号)作为分隔符,因为/(正斜杠符号)是我的模式的一部分。
答案 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
替换为#
。