파일에 저장된 파일 목록이 있고 각 파일을 검색하여 검색어를 찾고 싶습니다.
그러나 xargs
매개변수는 작은따옴표로 묶인 문자열로 전달되므로 접두사가 붙은 모든 파일에 대해 '가 확장되지 않기 때문에 오류가 ~
발생합니다 .No such file or directory
~
이것은 내가 실행 중인 명령입니다.cat search-files | xargs -n 1 grep 'search-term'
search-files
실제로 들어가서 경로를 직접 변경하지 않고 이 문제를 어떻게 해결할 수 있습니까?
답변1
그러나 다른 문제에 직면할 수도 있습니다. *
검색 파일에 또는 $(rm important-file)
? 줄이 포함되어 있으면 어떻게 될까요?
@steeldriver의 팁을 확장하면 다음과 같습니다.
sed "s,^~,$HOME," search-files | xargs -n 1 grep 'search-term'
답변2
알았어 알아냈어ㅏ해결 방법이 있지만 왜 작동하는지 잘 모르겠습니다.
삽입하면 xargs -i sh -c 'echo {}'
물결표가 확장됩니다.
전체 명령은 다음과 같습니다.
cat search-files | xargs -i sh -c 'echo {}' | xargs -n 1 grep 'search-term'
편집: 좋습니다. 작동 방식은 다음과 같습니다. 명령을 실행할 때 xargs
각각 과 작은따옴표를 [command]
사용하십시오 . [initial-args]
따라서 원래 명령과 마찬가지로 grep
및 {}
는 작은따옴표로 묶입니다. 그러나 을 행함으로써 sh -c 'echo {}'
우리는 동일 echo
하게 된다 . 이를 통해 정상적인 파형 확장이 가능합니다. 작은 따옴표가 없으면 작동하지 않습니다 .{}
[initial-arg]
sh
'echo {}'