Bash

在文本文件的同一行中的某個字元串之後添加字元串

  • June 8, 2017

我一直在嘗試在文本文件的同一行中添加一個字元串。我使用了以下方法。

sed -i "s/\bmembers\b/& \t$host,/" printer.cfg

它將在成員字元串之後添加一個字元串,並且它還將添加選項卡以使其正確。

我會得到這樣的結果,

define hostgroup{
hostgroup_name  HOSTGROUP ONE   
alias       Host Group 1 Printers
members     foo0, foo1, bar2, foo2, bar3
}

其中 foo0 是我使用上述 sed 添加的字元串。

但問題是有一個文本文件,其中包含許多“成員”字元串。

例如

define hostgroup{
hostgroup_name  HOSTGROUP ONE   
alias       Host Group 1 Printers
members     foo1, bar2, foo2, bar3
}

define hostgroup{
hostgroup_name  HOSTGROUP TWO
alias       2nd Host Group
members     example1, example3, example2
}

在上面的範例中,我只想在第一段(hostgroup_name HOSTGROUP ONE)中添加字元串。在這種情況下,如何使用一個選項卡引用 hostgroup_name 並在“members”字元串之後添加文本?

兩種方法:

sed方法:

sed "0,/members/{s/\bmembers */&$host, /}" printer.cfg
  • 0,/members/- 地址範圍佔據從第一行到第一次出現members模式的行範圍

awk方法:

awk -v h=$host '!f && /members /{ $2=sprintf("%8s, %s",h,$2); f=1 }1' printer.cfg

輸出(兩種方法):

define hostgroup{
hostgroup_name  HOSTGROUP ONE   
alias       Host Group 1 Printers
members     foo0, foo1, bar2, foo2, bar3
}

define hostgroup{
hostgroup_name  HOSTGROUP TWO
alias       2nd Host Group
members     example1, example3, example2
}

引用自:https://unix.stackexchange.com/questions/369891