sh의 xargs에서 작은따옴표 물결표를 확장하는 방법은 무엇입니까?

sh의 xargs에서 작은따옴표 물결표를 확장하는 방법은 무엇입니까?

파일에 저장된 파일 목록이 있고 각 파일을 검색하여 검색어를 찾고 싶습니다.

그러나 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 {}'

관련 정보