SED Удалить строки и заменить новым из файла - PullRequest
0 голосов
/ 03 января 2011

Смотрели документацию SED, но нужен маленький указатель в правильном направлении

У меня есть 200 файлов, которые я хочу изменить в пакете. Источник - HTML-файл. Нужно создать новый файл для изменений.

Хотите удалить первую часть каждого файла вплоть до первого тега (это примерно 20 строк, но они могут незначительно отличаться). Затем вставьте содержимое исходного файла (одинакового для всех файлов) в новый целевой файл, начиная со строки 1, примерно на 30 строк. Количество строк для вставки не совпадает с количеством удаленных.

Надеюсь, вы можете помочь.

Пол

Ответы [ 2 ]

2 голосов
/ 03 января 2011

Конечно, это можно сделать с помощью sed (1), но я бы, вероятно, использовал редактор vanilla ed (1).

$ cat > bigfix.sh
for i in "$@"; do
  ed "$i" << \eof
1,/<tag>/-1d
0r otherfile.html
w
q
eof
done
$ sh bigfix.sh file*.html

Этот сценарий оболочки принимает аргументы и запускает ed (1) для каждого аргумента. Удаляет строки, начиная с первой и заканчивая строкой прямо перед строкой с <tag>. Затем он ставит otherfile.html наверх и записывает результат.

0 голосов
/ 03 января 2011

Для отдельного файла:

sed -e '1,/tag/{/tag/r insertfile' -e ';d}' inputfile > outputfile

Для многих файлов:

find . -name 'criterion*.ext' -type f -exec sh -c 'sed -e "1,/tag/{/tag/r insertfile" -e ';d}" "{}" > "{}.new"' \;

Edit:

Исправлена ​​команда find для использования sh из-за перенаправления. Обратите внимание на изменение цитаты по сравнению с предыдущей версией.

...