grep에서 ^M이 포함된 행을 제외할 수 없습니다.

grep에서 ^M이 포함된 행을 제외할 수 없습니다.

Removed '2022-01-30_01-00-05'마지막에 추출 하고 싶은 다음 파일이 있습니다 .

Removing '2022-01-30_01-00-05'...
  0.46% complete (00:03:45 remaining)^M  5.49% complete (00:00:17 remaining)^M 24.90% complete (00:00:06 remaining)^M 60.56% complete (00:00:01 remaining)^M 82.12% complete (00:00:00 remaining)^M 82.39% complete (00:00:01 remaining)^M 84.24% complete (00:00:01 remaining)^M 86.48% complete (00:00:01 remaining)^M 88.58% complete (00:00:01 remaining)^M 89.66% complete (00:00:01 remaining)^M101.08% complete (00:00:00 remaining)^M104.62% complete (00:00:00 remaining)^M                                                                                ^MRemoved '2022-01-30_01-00-05'

나는 dos2unix성공하지 않고 이것을 시도했습니다.

아래에서 이러한 변형을 시도했지만 그렇게 해도 문자가 less output제거되지 않거나 ^M전체 줄이 캡처되지 않습니다.

tr -d $'\r' < /file | grep "Removed" > output
tr -d '^M' < /file | grep "Removed" > output
tr -d ^M < /file | grep "Removed" > output
sed 's/\r//g' < /file | grep "Removed" > output

답변1

grep명령은 일치하는 전체 행을 인쇄하며 *nix의 행은 \n및 not 에 의해 정의 되므로 \r설명하는 내용은 정상적인 동작입니다. 즉, 첫 번째 명령과 마지막 명령( the tr -d '\r'및 the sed 's/\r//g')은 모두 예상대로 작동합니다. 단지 grep이 예상한 작업을 수행하고 전체 줄을 인쇄하는 것뿐입니다.

인쇄만 가능부분grep한 줄에는 GNU 와 그 옵션이 필요합니다 -o. 예를 들어:

$ grep -oP "Removed\s*'[^']+'" file
Removed '2022-01-30_01-00-05'

또는 \r( ^M)를 제거하는 대신 개행 문자로 변경하세요.

$ tr '\r' '\n' < file | grep Removed
Removed '2022-01-30_01-00-05'

또는

$ sed 's/\r/\n/g' file | grep Removed
Removed '2022-01-30_01-00-05'

답변2

dos2unix\r줄 끝( ) 앞에서 제어-M을 제거합니다 \n. 그것은 당신이 가지고 있는 것이 아니며 제어-M이 있습니다.바꾸다줄 끝. 그래서 dos2unix당신을 돕지 않습니다.

다중 문자 RS에는 GNU awk를 사용하고 \rs 및/또는 \ns 시퀀스를 레코드 구분 기호로 사용합니다.

$ awk -v RS='[\r\n]+' '/^Removed/' file
Removed '2022-01-30_01-00-05'

답변3

awk '{for(i=1;i<=NF;i++){if($i ~ /Removed/){print $i,$(i+1)}}}' filename| awk '{gsub(/\^M/,"",$0);print }'

산출

Removed '2022-01-30_01-00-05'

답변4

입력 파일에 Mac 개행 문자가 있습니다. Unix 개행 문자로 변환할 수 있습니다.

dos2unix -c mac file

또는

mac2unix file

파일의 개행 유형을 찾으려면 다음 명령을 사용할 수 있습니다.

dos2unix -ih file

관련 정보