Я хочу передать вывод grep в sed для ввода - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь передать вывод grep в sed, чтобы он редактировал только определенные c файлы. Я не хочу, чтобы sed редактировал что-либо, не меняя этого. (Изменение даты изменения.)

Я ищу с помощью grep и пишу с помощью sed. Вот и все.

То, что я пытаюсь изменить, - это da sh, а не обычный тип, особый тип. "-" это нормально. «-» не является нормальным


Код, который у меня сейчас есть:

sed -i 's/– foobar/- foobar/g' * ; perl-rename 's/– foobar/- foobar/' *'– foobar'*

Извините за проблему, у меня нет опыта.

Ответы [ 3 ]

0 голосов
/ 17 июня 2020

Это может быть то, что вы пытаетесь сделать, если имена ваших файлов не содержат символы новой строки:

grep -l -- 'old' * | xargs sed -i 's/old/new/'
0 голосов
/ 17 июня 2020

Спасибо всем за помощь, извините за то, что не успел ответить

После небольшого возни с командой я получил это:

grep -l 'old' * | xargs -d '\n' sed -i 's/old/new/'

Это должно быть только коснитесь файлов, содержащих old, и оставьте все остальные файлы.

0 голосов
/ 17 июня 2020

Вы уверены в том, чего хотите достичь? Позвольте мне объяснить вам:

grep "string_in_file" <filelist> | sed <sed_script>

Сначала отображается строка "string_in_file", которой предшествует имя файла.
Если вы запустите sed на этом, то он просто покажет вам результат этот sed -скрипт на экране, но он не изменит сами файлы. Для этого вам потребуется следующее:

grep -l "string_in_file" <filelist> | sed <sed_script_on_file>

grep -l показывает вам несколько имен файлов, а новый sed_script_on_file должен быть скриптом, читающим файл и изменяющим его.

...