Два подхода:
sedподход:
sed "0,/members/{s/\bmembers */&$host, /}" printer.cfg
0,/members/
- диапазон адресов, занимающий диапазон строк, начиная с 1-й строки до первого вхождения из членов
шаблон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
}
Вы можете использовать awk
для этого.
awk '{for(i=1;i<=NF;i++) printf "%s\n",$i}' input.txt
tr -s '[:blank:]' '\n' < file
или
awk 'BEGIN{RS="[ \t\n]+"} 1' file
Легкая работа дляtr
:
$ cat input | tr ' ' '\n'
12
0
9
3
12
0
12
0
12
0
12
0
7
5
Использование xargs:
xargs -n1 < <(head input)
Или вы можете воспользоваться разбиением слов оболочки:
printf '%s\n' $(head input)