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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.