Заміна рядка на основі номера рядка


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 ... ось вона не бере її
RAMAN

1
Це просто не вийде. Для цього потрібні рясні втечі. А що робити, якщо третій рядок дублюється в іншому місці?
Sparhawk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.