Вы предоставляете аргументы имени файла с помощью xargs
. Вы также не должны использовать *.yml
в качестве аргумента. Оболочка расширит это до файлов .yml
в текущем каталоге, и вы получите сообщение об ошибке, если их нет.
Если вы хотите, чтобы grep -r
проверял только .yml
файлы, используйте параметр --include
.
grep -rl --include='*.yml' foo . | xargs sed -i -e "s/foo/a bar/g"
Обратите внимание, что команда s
не используется для добавления новой строки после строки. Используется для замены в той же строке. s/foo/ a bar/g
заменяет все foo
в строке на a bar
. Если вы хотите добавить, избавьтесь от команды s
. Кроме того, вы не ставите /g
в конце команды a
.
grep -rl --include='*.yml' foo . | xargs sed -i -e "/foo/a bar"
См. Как вставить текст после определенной строки в файле?