Sed
, вероятно, не лучший инструмент для этого, потому что если действительно не знает о полях. Рассмотрим awk
(который имеет встроенную концепцию полей):
$ awk -F : 'NF>=2{split($0,a,":");a[2]="new sting";printf(a[1]);for(i=2;i<=NF;i++){printf":%s",a[i]};printf("\n");}' <input file>
или отформатирован для удобства чтения:
awk -F : 'NF>=2 {
split($0,a,":");
a[2]="new sting";
printf(a[1]);
for(i=2;i<=NF;i++){
printf":%s",a[i]
};
printf("\n");
}' <input file>
Для простоты вы можете заменить ":"
на FS
. Также стоит обратить внимание на t его join
функцию , которая сделает реализацию чище, если вы пишете скрипт, а не работаете в командной строке.
В данной реализации предполагается, что вы хотите заменить все вторыми полями. Если вам нужно выбрать только некоторые из линий для замены, измените шаблон на
$2=="string to match"
или
$2~/regex to match/