특정 표현식으로 끝나는 줄을 찾는 방법

특정 표현식으로 끝나는 줄을 찾는 방법

4개의 문장이 포함된 텍스트 파일이 있고 "me"로 끝나는 문장을 grep하고 싶지만 grep "me$"를 수행하면 작동하지 않습니다.

내가 뭐 놓친 거 없니?

(결과가 1, 2, 4행이 되기를 원합니다.)

편집: 이미지를 텍스트로 바꿉니다.

$ cat sm.txt
somebody once told me

somebodyoncetoldme

the world was

gonna roll me
$ grep "me$" sm.txt
$

답변1

댓글에서file텍스트 파일을 CRLF 줄 끝이 있는 ASCII 텍스트 파일로 식별 한다고 말씀하셨습니다 . 이는 Windows 시스템에서 편집기를 사용하여 생성된 DOS 텍스트 파일임을 다른 방식으로 표현한 것입니다.

Unix 텍스트 파일과 비교하여 DOS 텍스트 파일에는 줄 바꿈 문자 앞의 각 줄 끝 부분에 추가 캐리지 리턴 문자가 있습니다. 그렇기 때문에 정규 표현식이 일치하지 않고 실제로 로 끝나는 줄이 없으며 me로 끝나는데 me\r, 이는 \r캐리지 리턴을 작성하는 일반적인 방법입니다.

해결 방법은 dos2unixUnix 시스템에서 사용하기 전에 변환 도구를 사용하여 텍스트 파일을 Unix 텍스트 파일로 변환하는 것입니다.

답변2

그 자체로는 grep "me$"절대적으로 정확합니다. 귀하의 줄이 탭이나 공백과 같이 보기 어려운 추가 문자로 끝나는 것 같습니다.

다음 중 하나를 시도해 보십시오.

# \t means tab
# [\t ] means a tab or a space
# [\t ]* means any number (including zero) of tabs and spaces.
#
grep "me[\t ]*$" sm.txt

또는:

# [[:space:]] means any white space. I don't know if there are
# more than just space and tabs. This works with GNU grep only.
#
grep "me[[:space:]]*$" sm.txt

관련 정보