내 명령을 실패하게하는 파일 이름의 공백을 처리하기 위해 주로 내 bash 명령에서 백틱 내의 문자를 이스케이프 처리하려고합니다.Bash : 백틱에 이스케이프 문자가 있습니다.
지금까지이 명령은 다음과 같습니다
grep -Li badword `grep -lr goodword *`
이 명령은 단어 "금지 단어"를 포함하지 않지만 "이 GoodWord"를 포함 할 파일의 목록을 초래할 것이다.
내 명령을 실패하게하는 파일 이름의 공백을 처리하기 위해 주로 내 bash 명령에서 백틱 내의 문자를 이스케이프 처리하려고합니다.Bash : 백틱에 이스케이프 문자가 있습니다.
지금까지이 명령은 다음과 같습니다
grep -Li badword `grep -lr goodword *`
이 명령은 단어 "금지 단어"를 포함하지 않지만 "이 GoodWord"를 포함 할 파일의 목록을 초래할 것이다.
당신의 접근 방식 . 그것은이 올바르게에 공백이있는 파일을 처리 할이
grep -lr -- goodword * | xargs grep -Li -- badword
처럼, 두 번째 grep
에 처음 grep
의 출력 파이프에 더 나은이지만, 파일 이름이 거기에 줄 바꿈이있는 경우 실패합니다. 적어도 GNU grep
및 xargs
지원이
grep -lrZ -- goodword * | xargs -0 grep -Li -- badword
EDIT처럼, NUL 바이트로 파일 이름을 구분 : 일부 파일 이름 -
로 시작하고 grep
에 의해 해석 될 때의 경우를 방지하기 위해 추가 된 더블 대시 --
grep
에 호출을 추가 옵션으로.
팁 주셔서 감사! 나는 여전히 이상한 행동을하고있다. 이 명령을 실행하려고하면 다음 출력이 표시됩니다. root @ domain [/ 경로] # grep -lrZ goodword * | xargs -0 grep -Li badword grep : 유효하지 않은 옵션 -k 사용법 : grep [옵션] ... 패턴 [FILE] ... 자세한 내용은'grep --help '를 시도하십시오. (표준 입력) –
@ 이안 : 디렉토리에 이름이'-'로 시작하는 파일이 있습니까? 이 경우'-'를'grep'의 실제 인수 앞에 추가하십시오. 그에 따라 대답을 수정했습니다. – JaakkoK
굉장하다 - 완전히 효과가있다. 무리 감사. –
에 대한 것은 그것을 다시 작성 방법 : goodword
grep
에 의한 파일 출력의 수는 명령 줄 길이에 대한 제한에 도달 할 때 문제로 실행, 탈출 제대로 경우에도,
grep -lr goodword * | grep -Li badword
당신의 제안은 파일에'goodword'가 들어있는 파일을 출력하고 _name_ 파일에는'badword'가 포함되지 않습니다 – JaakkoK
사실입니다; xargs가 필요합니다 ... 이것을 지적 해 주셔서 감사합니다 :) –
[backticks를 사용하지 마십시오.] (http://mywiki.wooledge.org/BashFAQ/082) –
이 질문은 "bash escape backtick"에 대한 Google의 첫 번째 페이지에 나와 있으므로 실제 질문 (bash에서 backticks 문자를 벗어나는 방법). –