이는 후속 조치입니다.이 질문. 차이점은 다음과 같습니다.
다음은 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을 올바르게 수행합니다.