Как я могу избежать ошибки ввода файлов из sed при запуске из xargs?

У меня есть этот сценарий оболочки для обновления IP-адресов в моих файлах конфигурации (все, которые соответствуют $old_address_pattern, должны быть изменены на $new_address):

grep -rl "$old_address_pattern" /etc \
  | xargs sed -i "s/$old_address_pattern/$new_address/g"

Если команда grep не найдет подходящих файлов, то sed сообщит об отсутствии входных файлов. Как я могу сделать этот конвейер успешным, когда список файлов пуст?


person qurat    schedule 16.02.2016    source источник


Ответы (1)


Если вы хотите избежать запуска sed, когда grep не выводит никаких результатов, то (поскольку вы пометили это с помощью Ubuntu) вы можете указать аргумент -r или --no-run-if-empty для xargs:

--no-run-if-empty
-r
Если стандартный ввод не содержит непустых символов, не запускайте команду. Обычно команда запускается один раз, даже если нет ввода. Эта опция является расширением GNU.

Итак, ваша команда должна выглядеть так:

grep -rl "$old" /etc | xargs -r sed -i "s/$old/$new/g"
person Toby Speight    schedule 16.02.2016