Я хочу вставить некоторый текст посреди файла. Текст для вставки был бы после определенной строки, скажем,"<begin>
". Я не знаю номера строки, и при этом я не знаю, что количество строк в тексте вставляет. Я только знаю, что после строки, которая читает"<begin>
"Я должен вставить содержание другого файла.
Я просто не знаю, как использовать awk, чтобы сделать что-то вроде этого.
Спасибо :-)
/<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
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
сначала.)