我想在主机文件的某一行末尾附加一个别名。例如
我有
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。该行不一定是文件中的第二行,如我在此处所示。它可以在任何地方。
使用sed
和描述的模式:
sed '/192.168.1.2/s/$/ myalias/' file
使用sed
和特定行号:
sed '2s/$/ myalias/' file
也可以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
选择awk
,因为您可以使用字符串而不必使用正则表达式,其中需要转义点并且需要使用锚点和/或单词边界。您还可以确保字符串与第 1 列中的值匹配。
awk '$1==s{$0=$0 OFS alias}1' s=192.168.1.2 alias=myalias file
此外,当它是较大脚本的一部分时,能够使用变量字符串也很好。有了sed
,您将需要 shell 变量和报价技巧。
这是使用awk
的另一种方法
awk '/search pattern/{print $0 " myalias"; next}1' file