2015-06-18 2 views
2

Я три следующие строки внутри текстового файла (последние 3 строки):Замена строк в текстовых файлах (длится) Баш

  } 
    } 
    } 

То, что я хотел бы сделать, это сделать что-то вроде этого:

  } 
    } 
blablabla 
blablabla 
blablabla 
    } 

Есть ли способ сделать это с помощью sed или любой другой команды без ввода определенного номера строки?

ответ

4

Как это почти последняя линия, вы могли бы пойти на решение с использованием AWK:

awk '{ print p; p = $0 }END{ print "blablabla\nblablabla\nblablabla"; print p }' file 

Это буферами каждую строку в переменной p, печать предыдущего. В конце файла напечатайте строки, которые вы хотите вставить, перед печатью последней строки.

Как обычно, чтобы перенаправить вывод в файл, использовать перенаправление и сделать «на месте» редактировать, использовать временный файл:

for file in *; do 
    awk '...' "$file" > tmp && mv tmp "$file" 
done 
+0

умный один, молодец! Более надежная проверка будет содержать счетчик того, сколько раз '}' появлялось и печаталось 'blabla', только если оно равно 2. – fedorqui

+0

Спасибо! Да, я думаю, это зависит от того, что еще есть в файле. –

+0

Я пробовал оба решения (ваш и один выше), и, к сожалению, результат тот же. Он показывает мне текстовый файл экрана (похоже, я хочу его), но в файле нет изменений. Не могли бы вы мне помочь? Я хочу сделать этот процесс рекурсивно для всех файлов в папке, поэтому я использую команду 'for'. (не уверен, если в этом случае это имеет значение) Спасибо еще раз! – nemox007

5

с GNU SED

sed -i '$i blablabla\nblablabla\nblablabla' file 

$ соответствует последней строке, но i является вставкой, которая помещает текст перед соответствующей строкой

Используйте -i вариант sed для выполнения операций на месте, в этом c ase модифицирует файл info.

+1

Этот файл работает также с файлом перезаписи. Благодаря! – nemox007

Смежные вопросы