grep -Ef는 '잘못된 문자 범위'라고 말합니다. 다시

grep -Ef는 '잘못된 문자 범위'라고 말합니다. 다시

이는 후속 조치입니다.이 질문. 차이점은 다음과 같습니다.

다음은 foo.txt 내부의 내용을 발췌한 것입니다(매우 큽니다).

^.{64}  /Volumes/Documents - Part 1/July 2009/Mum & Dad/Winter Wonderland [日本].mkv$
^.{64}  /Volumes/Documents - Part 1/March 2004/Mac OS X/Adobe Illustrator Documents/swimming.zip$

다음은 bar.txt(역시 거대함) 내부의 내용을 발췌한 것입니다.

c815bebbc553fdf13b16bc99d417053cbe22c13c714d12cf16e740516a5cdeda  /Volumes/Documents - Part 1/July 2009/Mum & Dad/Winter Wonderland [日本].mkv
cab951c9779db6d484cec544482e742c75effea61c426264cb47788fddd4999e  /Volumes/Documents - Part 1/March 2004/Baseball/Pro Yakyuu.7z
635431114b7d898cfebd78f25b50bfea1f1593c292c15e631377347abba3e0e6  /Volumes/Documents - Part 1/March 2004/Mac OS X/Adobe Illustrator Documents/swimming.zip

그리고 내가 실행하는 명령은 다음과 같습니다.

grep -Ef foo.txt bar.txt

grep이것을 뱉어낸다:

grep: invalid character range

grep대신에 다음을 출력하고 싶습니다 .

c815bebbc553fdf13b16bc99d417053cbe22c13c714d12cf16e740516a5cdeda  /Volumes/Documents - Part 1/July 2009/Mum & Dad/Winter Wonderland [日本].mkv
635431114b7d898cfebd78f25b50bfea1f1593c292c15e631377347abba3e0e6  /Volumes/Documents - Part 1/March 2004/Mac OS X/Adobe Illustrator Documents/swimming.zip

내가 도대체 ​​뭘 잘못하고있는 겁니까? grep필요한 것을 출력하려면 무엇을 변경해야 합니까 ?

Mac OS X Yosemite, bash 3.2.57(1) 릴리스

답변1

나는 foo.txt의 대괄호 문자 "[" 및 "]"가 bar.txt의 해당 리터럴 대괄호 문자와 일치하기를 원한다는 OP에 대한 의견을 추론하고 있습니다. 이것이 맞다고 가정하면 foo.txt에서만 백슬래시로 이스케이프 처리해야 합니다.

이 수정을 한꺼번에 수행하는 한 가지 방법은 다음과 같습니다 sed.

sed -i.bak -e 's/\[/\\[/g' -e 's/\]/\\]/g' foo.txt

그러면 수정된 foo.txt가 남고 원본 파일은 foo.txt.bak가 됩니다.

내 추론이 올바르지 않은 경우 귀하에게 적합하지 않은 특정 줄을 포함하도록 게시물을 편집하십시오. 이 sed 명령이 foo.txt에 적용되면 위에 게시한 줄은 grep을 올바르게 수행합니다.

관련 정보