我想在我的hosts文件的某一行的末尾添加一个别名。例如
我有
192.168.1.1 www.address1.com
192.168.1.2 www.address2.com
192.168.1.3 www.address3.com
我希望它看起来像
192.168.1.1 www.address1.com
192.168.1.2 www.address2.com myalias
192.168.1.3 www.address3.com
我想找到包含19.2.68.1.2的行,并在其末尾添加myalias。该行不一定是文件中的第二行,就像我在这里看到的那样。它可能在任何地方。
答案 0 :(得分:37)
使用sed
和描述的模式:
sed '/192.168.1.2/s/$/ myalias/' file
使用sed
和特定的行号:
sed '2s/$/ myalias/' file
答案 1 :(得分:1)
awk
解决方案也是可能的:
awk '{if (/^192\.168\.1\.2 /) {$0=$0 " myalias"}; print}' hosts
上面逐一从hosts
文件中读取行。如果该行在开头有我们的IP地址,则myalias
将附加到该行。然后该行打印到stdout
。
注意两件事。 if
条件下的IP地址后面有一个空格。否则,正则表达式可以匹配192.168.1.20
等。此外,IP地址中的句点将使用反斜杠进行转义。否则,他们可以匹配任何角色。
解决方案的一个简单形式是:
awk '/^192\.168\.1\.2 /{$0=$0 " myalias"}1' hosts
答案 2 :(得分:0)
以下是使用awk
awk '/search pattern/{print $0 " myalias"; next}1' file
答案 3 :(得分:0)
我会选择awk
,因为你可以使用字符串而不必使用正则表达式,其中需要转义点,并且需要使用锚点和/或单词边界。您还可以确保字符串与第1列中的值匹配。
awk '$1==s{$0=$0 OFS alias}1' s=192.168.1.2 alias=myalias file
此外,当它是更大脚本的一部分时,能够使用变量字符串是很好的。使用sed
,您需要shell变量并引用技巧..