Используйте sed для поиска и замены строки в нескольких файлах [дубликат]

Вся моя ошибка в сценарии оболочки.

Я делал эхо Y | apt upgrade , который, очевидно, вызывает проблему перенаправления при вызове диалога.

Мне следовало выполнить apt upgrade -y или wajig upgrade -y .

Когда я впервые попробовал apt -y upgrade , он пожаловался на неправильный синтаксис. поэтому я прибег к тому плохому уловку, который, как я забыл, применил.

Пусть другие заметят, чтобы избежать подобных проблем.

1
05.07.2017, 20:26
3 ответа

У вас ошибка в петле for. Удалите команду lsи добавьте переменную $fв качестве аргумента к sed -i, которая будет редактировать каждый filename.xmlвместо :

.
for f in *.xml; do sed -i "s|foo|bar|g" "$f"; done
4
27.01.2020, 23:24

sed ожидает входной путь в качестве параметра. Итак, попробуйте следующую конструкцию:

 … | sed -i "…" /dev/stdin

Было бы еще проще использовать файлы в качестве параметра, так как это (не проверено):

sed -i "..." *.xml
0
27.01.2020, 23:24

Обратите внимание, что в GNU sed вы можете редактировать несколько файлов, а также в -месте. Таким образом, ваша задача сводится к:

sed -i -se 's|foo|bar|g' *.xml

-s for --separate— это опция sed, которая делает это.

1
27.01.2020, 23:24

Теги

Похожие вопросы