附加到文本文件sed中的一行中间

时间:2012-10-03 10:02:02

标签: sed

我对sed脚本完全不熟悉。我一直在研究如何将文本添加到文件中并设法将我想要的文本添加到文件中的正确行但无法找到将其添加到正确位置的方法!

所以我在文本文件中的行看起来像这样

  listen_addresses = 'localhost, 192.0.0.0' # what IP address(es) to listen on;

我想添加一个IP,所以该行看起来像:

   listen_addresses = 'localhost, 192.0.0.0, 192.0.0.0'  # what IP address(es) to listen on;

通过反复试验,我只有:

   sed -i '/listen_addresses/ s/.*/&,192.0.0.0/' testfile

给出:

  listen_addresses = 'localhost, 192.0.0.0' # what IP address(es) to listen on; 192.168.0.0

如何将其添加到正确的位置?

2 个答案:

答案 0 :(得分:7)

有很多方法。其中一个可能是搜索最后'并使用括号来保存匹配的数据。我将单引号更改为双引号,因为我想在正则表达式中匹配其中一个:

sed -i "/listen_addresses/ s/^\(.*\)\('\)/\1, 192.0.0.0\2/" testfile
  • ^\(.*\):从开头到结尾匹配(贪吃)。
  • \('\):从结尾回溯到'。所以它将匹配字符串中的最后一个。
  • \1:第一对括号之间保存的内容。
  • , 192.0.0.0:文字字符串。
  • \2:内容保存在第二对括号之间。

答案 1 :(得分:2)

只需替换该行的' #部分:

sed -i "/listen_addresses/ s/' #/, 192.0.0.0' #/" testfile

请注意,我使用双引号,因此可以轻松插入单引号。