如何在 bash 中文件中特定行的末尾附加字符串



我想在主机文件的某一行末尾附加一个别名。例如

我有

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

相关内容

  • 没有找到相关文章

最新更新