2010-08-13 4 views
1

내 명령을 실패하게하는 파일 이름의 공백을 처리하기 위해 주로 내 bash 명령에서 백틱 내의 문자를 이스케이프 처리하려고합니다.Bash : 백틱에 이스케이프 문자가 있습니다.

지금까지이 명령은 다음과 같습니다

grep -Li badword `grep -lr goodword *` 

이 명령은 단어 "금지 단어"를 포함하지 않지만 "이 GoodWord"를 포함 할 파일의 목록을 초래할 것이다.

+2

[backticks를 사용하지 마십시오.] (http://mywiki.wooledge.org/BashFAQ/082) –

+1

이 질문은 "bash escape backtick"에 대한 Google의 첫 번째 페이지에 나와 있으므로 실제 질문 (bash에서 backticks 문자를 벗어나는 방법). –

답변

3

당신의 접근 방식 . 그것은이 올바르게에 공백이있는 파일을 처리 할이

grep -lr -- goodword * | xargs grep -Li -- badword 

처럼, 두 번째 grep에 처음 grep의 출력 파이프에 더 나은이지만, 파일 이름이 거기에 줄 바꿈이있는 경우 실패합니다. 적어도 GNU grepxargs 지원이

grep -lrZ -- goodword * | xargs -0 grep -Li -- badword 

EDIT처럼, NUL 바이트로 파일 이름을 구분 : 일부 파일 이름 -로 시작하고 grep에 의해 해석 될 때의 경우를 방지하기 위해 추가 된 더블 대시 --grep에 호출을 추가 옵션으로.

+0

팁 주셔서 감사! 나는 여전히 이상한 행동을하고있다. 이 명령을 실행하려고하면 다음 출력이 표시됩니다. root @ domain [/ 경로] # grep -lrZ goodword * | xargs -0 grep -Li badword grep : 유효하지 않은 옵션 -k 사용법 : grep [옵션] ... 패턴 [FILE] ... 자세한 내용은'grep --help '를 시도하십시오. (표준 입력) –

+0

@ 이안 : 디렉토리에 이름이'-'로 시작하는 파일이 있습니까? 이 경우'-'를'grep'의 실제 인수 앞에 추가하십시오. 그에 따라 대답을 수정했습니다. – JaakkoK

+0

굉장하다 - 완전히 효과가있다. 무리 감사. –

1

에 대한 것은 그것을 다시 작성 방법 : goodwordgrep에 의한 파일 출력의 수는 명령 줄 길이에 대한 제한에 도달 할 때 문제로 실행, 탈출 제대로 경우에도,

grep -lr goodword * | grep -Li badword 
+1

당신의 제안은 파일에'goodword'가 들어있는 파일을 출력하고 _name_ 파일에는'badword'가 포함되지 않습니다 – JaakkoK

+0

사실입니다; xargs가 필요합니다 ... 이것을 지적 해 주셔서 감사합니다 :) –

관련 문제