我正在尝试删除不以#开头的行,并匹配文件
中的模式localhost# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 localhost <---- line I want to delete
127.0.0.2 abcabc
我尝试过以下脚本,但不起作用。
sed -i "/^[^#](.*)localhost$/d" /etc/hosts
sed -i "/^([0-9]{1,3}\.){3}[0-9]{1,3}/d" /etc/hosts
如何删除该行?
答案 0 :(得分:1)
默认sed将()
作为文字字符,而不是捕获组。
sed -i "/^[^#].*localhost$/d" /etc/hosts
OR
sed -i "/^[^#].* \+localhost.*$/d" /etc/hosts
在字符串localhost
之后可能会出现空格的可能性,所以我在上面的命令中在字符串.*
旁边添加了localhost
。
示例:强>
$ cat file
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 localhost
127.0.0.2 abcabc
$ sed "/^[^#].*localhost$/d" file
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.2 abcabc
答案 1 :(得分:0)
"/^[^#]*localhost$/d"
您可以简单地将其用作sed
的参数来删除所需的行。
答案 2 :(得分:0)
awk '/localhost/ && !/#/ {next} 1'
结果
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.2 abcabc