замена строк текстового файла текстом другого файла с использованием sed или awk - PullRequest
0 голосов
/ 06 ноября 2011

У меня есть текстовый файл, например File1.txt, и я хочу заменить несколько его строк новыми строками, доступными в другом текстовом файле, например, File2.txt.Формат файла File1.txt приведен ниже. Указатели имеют начало и конец.

START

line 1
line 2
line 3 
line 4
line 5

END

Я хочу изменить строку 1 на строку 5 со строками, доступными в File2.txt.Количество строк не совпадает в File1.txt и File2.txt.File2.txt может иметь больше или меньше строк, как в File1.txt.

Мне нужен ввод от кого-то.Благодарю в ожидании

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Этот GNU sed один лайнер может работать:

sed -re '/^START/,/^END/{/^START/{p;r File2.txt' -e '};/^END/p;d}' File1.txt

Это вставляет File2.txt между START и END, но не сохраняет пустые строки после line 1 и до line 2

Это пытается сохранить пустые строки:

sed -re '/^START/,/^END/{//!{/^$/{p;d};x;/./{x;d};x;h;r File2.txt' -e ';d};x;s/.*//;x}' File1.txt
1 голос
/ 06 ноября 2011

Если фиксированные части File1.txt , которые вы хотите сохранить, вам нужно только напечатать второй файл и включить в него следующие части:

printf 'BEGIN\n\n%s\n\nEND\n' "$(<File2.txt)"

ЕСЛИ это не так (замените START / END на шаблоны которые соответствуют частям, которые вы хотите сохранить):

awk 'NR == FNR {
  f2 = f2 ? f2 RS $0 : $0
  next
  }
/START|END/ || !NF {
  print; next  
  }
NF && !c++ { 
  print f2 
  }' File2.txt File1.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...