Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I avoid "no input files" error from sed, when run from xargs?

Tags:

sed

ubuntu

xargs

I have this shell script to update IP addresses in my configuration files (any that match $old_address_pattern must be changed to $new_address):

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

If the grep command finds no matching files, then sed will complain 'no input files'. How can I make this pipeline succeed when the list of files is empty?

like image 205
qurat Avatar asked Feb 16 '16 11:02

qurat


1 Answers

If you want to avoid running sed when grep produces no output, then (since you've tagged this with Ubuntu), you can give the -r or --no-run-if-empty argument to xargs:

--no-run-if-empty
-r
If the standard input does not contain any nonblanks, do not run the command. Normally, the command is run once even if there is no input. This option is a GNU extension.

So your command should look like:

grep -rl "$old" /etc | xargs -r sed -i "s/$old/$new/g"
like image 146
Toby Speight Avatar answered Nov 06 '22 01:11

Toby Speight