Bash
在文本文件的同一行中的某個字元串之後添加字元串
我一直在嘗試在文本文件的同一行中添加一個字元串。我使用了以下方法。
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 }