У меня проблемы с передачей на выход sed
для использования с grep
до xargs
.Я думаю, что это проблема расширения переменных, но я не уверен.
Сценарий таков.В текущем каталоге есть эти файлы:
file1.log
file1.log.67654
file2.log
file2.log.66876
file3.log
file3.log.56768
...
Из этих файлов только некоторые из тех, которые заканчиваются на .log
, содержат определенную строку, так что:
$ grep -l "certainString"
file1.log
file3.log
То, что я хочу, этонайдите, сколько из этих файлов ИЛИ те, которые начинаются таким образом, но имеют дополнительное расширение .numbers
(файлы file1.log
, file1.log.67654
, file3.log
и file3.log.56768
в этом примере) содержат другую строку.
Я думал, что эта команда сделает это:
grep -l "certainString" | sed "s/log/log*/g" | xargs grep -l "anotherString"
Но после замены log
на log*
на sed
, xargs
не расширяет *
, но интерпретирует его буквальнопоэтому:
$ grep -l "certainString" | sed "s/log/log*/g" | xargs grep -l "anotherString"
grep: ./file1.log*: No such file or directory
grep: ./file3.log*: No such file or directory
Я читал об этом, и люди предлагают использовать что-то вроде:
grep -l "certainString" | sed "s/log/log*/g" | xargs -I@ sh -c 'grep -l "anotherString"'
Но я не могу заставить это работать (я не до конца понимаю, чтобыбудь честным).Я чувствую, что я просто там, но мне не хватает деталей.Любая помощь?