修复 sed 表达式

修复 sed 表达式

我使用来自不同来源的“hosts”文件,并使用以下 SED 代码来解锁某些网站:

sed -i '/0.0.0.0 internet.com/s/^/#/g' /tmp/hosts

结果:

它将 # 放在前面

0.0.0.0 internet.com

但是也

0.0.0.0 internet.com.site

我需要修复它。

答案1

如果只想匹配完整行,则指定完整行:

sed -i '/^0.0.0.0 internet.com$/s/^/#/g' /tmp/hosts

这些^方法是离线启动的,正如您已经在替换的搜索模式中使用的那样。

表示$行尾。

因此,^0.0.0.0 internet.com$只会匹配完全匹配的行0.0.0.0 internet.com,而不是仅包含它作为子字符串的行。

答案2

这是我使用的。它还处理包含别名的条目

$ cat -vet hosts
0.0.0.0 internet.com internet$
0.0.0.0 internet.com^Iinternet$
0.0.0.0 internet.com$
0.0.0.0 internet.com.site$

$ sed  's/^0.0.0.0 internet.com\( \|\t\|$\)/# &/' hosts
# 0.0.0.0 internet.com internet
# 0.0.0.0 internet.com  internet
# 0.0.0.0 internet.com
0.0.0.0 internet.com.site

显然,如果需要的话,可以很容易地改进它来处理多个空白。

相关内容