xargs를 사용하여 링크 명령

xargs를 사용하여 링크 명령

bash를 사용하여 다음 결과를 얻으려고 합니다.

  1. grep특정 하위 문자열에 대한 파일입니다.
  2. 이러한 파일의 파일 이름(공백 포함 가능)을 가져와서 인쇄하세요.
  3. 각 파일 이름을 인쇄한 후 다시 grep하고 싶지만 이번에는 해당 파일 내에서만 가능합니다.

결과는 다음과 같습니다.

/tmp/file1.txt
it works!
/tmp/file2.txt
/tmp/file3.txt
it works!

다음과 같은 명령을 작성하려고 합니다.

grep -irl "something" . | xargs -I % sh -c 'echo "%"; cat "%" | grep -i "another thing" "%"'

설명: grep -l파일 이름을 반환합니다. 그런 다음 이 파일 이름을 인쇄 echo "%"한 다음 파일 내에서 grep을 수행하려고 합니다.

하지만 행운은 없습니다. 여기서 교훈은 무엇입니까?

명확히 하자면, 내 실제 문제/목표는 문자열 A를 포함하지만 문자열 B를 포함하지 않는 모든 파일을 찾는 것입니다.

추가 설명: 비슷한 것을 원하지만 grep A | grep -v B일치하는 모든 파일 목록도 원합니다.A

답변1

여기서 교훈은 무엇입니까?

아마도푸딩에 계란을 너무 많이 넣지 마세요.

%(
>  grep -l -r -- "$patternA" . |
>  티/개발/fd/7 |
>  xargs grep -L --"$patternB"
>) 7>&1

관련 정보