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를 사용하고 \r
s 및/또는 \n
s 시퀀스를 레코드 구분 기호로 사용합니다.
$ 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