Замена строки на основе номера строки

50

У меня есть ситуация, когда я хочу заменить определенную строку во многих файлах

Замените строку AAA другой строкой BBB, но есть много строк, начинающихся с AAA или заканчивающихся в AAA, и я хочу заменить только одну строку в строке 34 и оставить остальные нетронутыми.

Можно ли указать по номеру строки, во всех файлах эта строка точно на 34-й строке.

Крипто
источник

Ответы:

82

Вы можете указать номер строки в sed или NR (номер записи) в awk.

awk 'NR==34 { sub("AAA", "BBB") }'

или используйте FNR (запись номера файла), если вы хотите указать более одного файла в командной строке.

awk 'FNR==34 { sub("AAA", "BBB") }'

или же

sed '34s/AAA/BBB/'

сделать замену на месте с помощью sed

sed -i '34s/AAA/BBB/' file_name
Ванагасом
источник
-3

предположим, что вы хотите заменить третью строку в file_record:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record
КОМБИНАЦИОННОЕ
источник
использовать обратные кавычки , прежде чем голова и после -1 ... вот он не принимает его
КОМБИНАЦИОННЫЙ
1
Это просто не сработает. Нужно какое-то тяжелое спасение. А что, если третья строка дублируется в другом месте?
Sparhawk