Как я могу вставить строку посреди файла, с awk, учитывая шаблон поиска для вставки ПОСЛЕ или ПРЕЖДЕ

Я хочу вставить некоторый текст посреди файла. Текст для вставки был бы после определенной строки, скажем,"<begin>". Я не знаю номера строки, и при этом я не знаю, что количество строк в тексте вставляет. Я только знаю, что после строки, которая читает"<begin>"Я должен вставить содержание другого файла.

Я просто не знаю, как использовать awk, чтобы сделать что-то вроде этого.

Спасибо :-)

4
задан 10.10.2014, 14:03

2 ответа

/<begin>/{
    insert_file("before_file.html")
    print $0
    insert_file("after_file.html")
    next
}
{
    print $0
}

где необходимо будет записать insert_file функция, которая могла бы посмотреть что-то как

function insert_file(file) {
    while (getline line <file)
        print line
    close(file)
}

Обратите внимание, что эта точная версия, кажется, не работает как ожидалось над моим Mac, когда before_file и after_file являются тем же... Я только получаю единственное первая копия. Это, вероятно, имеет некоторое отношение к отказу закрыть файл. Я займусь расследованиями. Да, это необходимо для close файл, и это должно быть сделано в целом для хорошей практики.


Кроме того, я думаю, что это могло бы быть еще легче в sed...

Для вставки файла после ключевой строки

sed '/<begin>/r after_file.html' input_file

Inseting файл прежде немного более сложен,

 sed -n -e '/^function/r before_file.html' -e 'x' -e 'p' input_file

таким образом, Вы могли использовать сценарий как

/^function/r before_file.html
x
p

с

sed -n -f script input_file
5
ответ дан 07.12.2019, 19:30

Perl является более крупным братом awk.

perl -p -i -e 'print "some text\n" if /<begin>/' filename

Если Вы имеете, несколько <начинают> s затем, ему будет нужно исправление.

Править: О, Вы хотели вставить файл

perl -MFile::Slurp -p -i -e 'print read_file("file2") if /<begin>/' filename

(протестированный хорошо, но Вам, возможно, понадобилось бы cpan File::Slurp сначала.)

2
ответ дан 07.12.2019, 19:30

Теги

Похожие вопросы