Как сказал nosid, вы можете использовать опцию -i
для редактирования файла на месте.Прочтите справочную страницу в ВАШЕЙ операционной системе, чтобы точно определить, как использовать -i
.Затем вы можете обернуть sed в небольшой сценарий оболочки, чтобы идентифицировать файл и действовать на него:
for this in foo*.txt; do
sed -i'' -e 'your-sed-script' "$this"
done
Тем не менее, я не уверен, что ваш метод вставки будет работать или, по крайней мере, работать надежно.Я тестировал во FreeBSD и OS X, и это не сработало вообще.Моя обычная стратегия для вставки строк - использовать awk.Таким образом (например):
for this in foo*.txt; do
awk '/MYWORD/{print "Extra line of text goes here."} 1' "$this" > "$this.$$"
mv "$this.$$" "$this"
done
Здесь строка awk ищет / MYWORD / (расширенное регулярное выражение, тогда как sed
по умолчанию - базовые регулярные выражения).Если он его находит, сначала печатается текст «Extra».Затем «1» оценивается как «истина», которая также будет печатать текущую строку.В результате текст «Extra» вставляется в строку перед MYWORD.
Обратите внимание, что это не хороший скрипт.Это расточительно, обвязка и переименование файлов, которые не были изменены.Вы можете улучшить его, выбрав «mv» временный файл в зависимости от значения выхода из awk, или вы можете использовать cmp
, чтобы определить, изменился ли файл, затем очистить оставшиеся временные файлы и т. Д. Но он получаетуказать поперек.