줄바꿈을 피하세요

줄바꿈을 피하세요

다음과 같은 구조의 파일이 있습니다.

2015-03-25 17:08:17
sysUpTimeInstance 93474;^M
1.ValueforState=2500

개행 문자를 바꾸고 세 번째 줄을 두 번째 줄로 유지하고 싶습니다. 즉, 출력은 다음과 같습니다.

2015-03-25 17:08:17
sysUpTimeInstance 93474;1.ValueforState=2500

나는 sed를 사용해 본다:

sed 's/^M$//' myfile.dat > mynewfile.dat

하지만 ^M 기호만 제거됩니다.

어떤 제안이 있으십니까?

답변1

2가지 생각:

  1. sed를 사용하여 캐리지 리턴으로 끝나는 줄에 대해 다음 줄을 추가합니다.

    sed '/\r$/ {N; s/\r\n//} ' file
    
  2. awk를 사용하여 입력 및 출력에 대한 레코드 구분 기호를 정의합니다.

    awk -v RS='\r\n' -v ORS='' 1 file
    

답변2

게시물에 표시된 내용이 ^M실제로 캐리지 리턴( \r)이라고 가정하면 다음을 수행해야 합니다.

perl -pe 's/\r\n//g'

이는 입력에 포함된 줄 수에 관계없이 작동합니다. 로 끝나는 모든 줄은 \r\n다음 줄과 연결됩니다.

답변3

무슨 일이 일어날 수도 있습니다.

^M실제로 2자가 아니지만 일부 편집자가 캐리지 리턴(CR) 문자를 나타내는 방식인 ^경우 . M예를 들어. 이것이 내 Emacs 편집기의 모습입니다. 이 문자는 end-of-lineWindows 파일 시스템의 문자 쌍인 캐리지 리턴(16진수 값 0x0D) + 줄 ​​바꿈(16진수 값 0x0A)의 일부입니다. 개행 문자는 개행 문자라고도 합니다. Unix 파일 시스템은 줄 바꾸기에만 줄 바꿈을 사용합니다. Unix 스타일 줄 끝에서 원치 않는 캐리지 리턴을 제거하려면 sed다음 정규식을 사용할 수 있습니다. 참고 \x0D\r둘 다 적용됩니다 sed. 참고: \r이는 의 약어입니다 0x0D.

sed '/\r$/{N; s/\r\n//}'  

실제로 문자가 ^M두 개인 경우(Windows 파일이 Unix 스타일 파일로 잘못 변환될 때 발생하는 경우가 있음) 이를 특수 정규식 문자로 처리해야 합니다. 백슬래시를 사용해야 합니다. 다음 순서를 사용하세요. ^M^escape\sed

sed '/\^M$/{N; s/\^M\n//}'

답변4

실제로 세 줄만 있고 항상 두 번째와 세 번째 줄을 연결하려면 다음 명령을 사용할 수 있습니다.

sed -e '2N' -e 's/\r\n//'

N 명령은 다음 줄(즉, 세 번째 줄)을 두 번째 줄에 추가한 다음 교체를 통해 개행 문자를 제거합니다.

관련 정보