'^M$'을 어떻게 grep할 수 있나요? [복사]

'^M$'을 어떻게 grep할 수 있나요? [복사]

자막(.srt) 파일에서 줄을 추출하려고 합니다. 특정 줄 번호를 검색하면 예상한 답변을 얻을 수 있습니다.

% grep -e "^817" ponyo.srt                                             
817
%

그러나 캐리지 리턴(또는 캐리지 리턴 및 EOL)이 포함된 줄을 찾으려고 하면 빈 줄이 나타납니다.

% grep -e "^817\r" ponyo.srt 

% grep -e "^817^M$" ponyo.srt

%

다음은 "cat -e"를 사용하여 숨겨진 문자를 표시하는 텍스트 파일입니다.

% cat -e ponyo.srt 
1^M$
00:04:38,478 --> 00:04:43,381^M$
The Beginning^M$
^M$
2^M$
00:04:44,751 --> 00:04:51,122^M$
PONYO ON THE CLIFF BY THE SEA^M$
^M$
474^M$
01:00:23,016 --> 01:00:25,041^M$
Stay here with Ponyo.^M$
^M$
475^M$
01:00:25,285 --> 01:00:28,618^M$
I'm going too.^M$
Let's take Ponyo with us.^M$
^M$
817^M$
01:40:08,532 --> 01:40:13,834^M$
<i>Oh he 's my favorite little boy</i>^M$
^M$
823^M$
01:40:32,456 --> 01:40:38,156^M$
Studio Ghibli^M$
^M$
824^M$
01:40:39,530 --> 01:40:42,624^M$
The End^M$
^M$
825^M$
01:40:42,766 --> 01:40:45,792^M$
English translation by^M$
Jim Hubbert and Rieko Izutsu-Vajirasarn^M$
English subtitles by^M$
Aura^M$
^M$
%

줄의 끝을 찾고 결과에서 전체 줄을 얻으려면 어떻게 해야 합니까?

편집하다:추가하려면 예상대로 EOL을 검색하면 결과가 반환되지 않습니다.

% grep -e "^817$" ponyo.srt 
%

답변1

(답변을 주신 @steeldriver에게 감사드립니다.)

에서 언급했듯이이 게시물 grep --colorgrep이 터미널에 응답을 쓰는 방식을 변경하여 ^M화면 쓰기를 방해합니다. 나는 alias grep='grep --color=auto'이것을 bash 설정에서 사용하고 있습니다. 이 문제를 해결하고 영구적인 솔루션을 만들기 위해 별칭을 우회하기 위해 \별칭 없이 쉘에서 grep을 사용했습니다.

% \grep -e "^817^M" ponyo.srt
817
% 

답변2

두 가지가 중단을 일으키는 것 같습니다. 첫째, 큰따옴표를 사용하고 있습니다. 이는 쉘이 특정 내용을 그대로 전달하는 대신 해석한다는 의미입니다. 둘째, 내 쉘은 작은 따옴표를 사용해도 올바르게 검색하지 못하므로 달러 기호를 \로 이스케이프해야 할 수도 있습니다. 이러한 매개변수를 변경하면 grep실제로 찾고 있는 행이 반환됩니다(또는 적어도 저에게는 그랬습니다).

관련 정보