1

Как наиболее эффективно заменить содержимое файла между номерами строк другим файлом?

Вот образец:

main.txt:

a b c
d e f
g h i
j k l

new.part.txt

x y z
p q r
s t u

Блок текста, начинающийся со строки 2 и заканчивающийся строкой 3 main.txt , заменяется new.part.txt . Желаемый файл выглядит следующим образом:

a b c
x y z
p q r
s t u
j k l

Этот ответ относится к случаю, когда диапазон нужного блока определяется с помощью строк маркера. Мне нужно решение, которое использует номера строк для определения диапазона нужного блока.

2 ответа2

2

Вы вообще не используете bash.

Оболочка Bourne Again - это оболочка. Реальные утилиты для этого не являются частью оболочки и в значительной степени не зависят от оболочки. grawity используются функции оболочки, но в основном для параметризации.

Вот как это сделать с ex , редактируя файл на месте:

ex main.txt << EOT
2,3d
1r new.part.txt
w
EOT

Вот как это можно сделать с помощью sed , записав измененные данные в стандартный вывод:

sed -e '1r new.part.txt' -e '2,3d' main.txt
2
start=2
end=3

{
  head -n $((start-1)) old.txt
  cat new.txt
  tail -n $((end+1)) old.txt
} > merged.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .