sed - 새 파일에 쓸 때 개행 문자 유지

sed - 새 파일에 쓸 때 개행 문자 유지

데이터가 포함된 파일이 있습니다. 데이터에 제거해야 할 아티팩트가 포함되어 있는 경우가 있습니다. 예시 라인은 다음과 같습니다:

@@@@@@@@@@DK2018.4.24_0:0:0.200985,0.88,0.35,0.49,13.52,248.3

또는 다음과 같습니다:

\2017.9.12_0:0:0.152507,0.02,0.82,0.10,11.76,181.8
\2017.9.12_0:0:0.554122,0.18,0.93,0.04,11.76,191.1
\2017.9.12_0:0:0.654682,0.06,0.89,0.10,11.74,184.0
\2017.9.12_0:0:0.755092,0.00,0.89,0.06,11.77,180.5
\2017.9.12_0:0:0.855754,0.02,0.87,0.09,11.76,181.4
\2017.9.12_0:0:0.955123,0.13,0.80,0.23,11.77,189.8
\2017.9.12_0:0:1.055499,0.10,0.82,0.35,11.76,187.6
\2017.9.12_0:0:1.155970,0.18,0.81,0.40,11.74,192.9
\2017.9.12_0:0:1.256581,0.15,0.91,0.44,11.74,189.3
\2017.9.12_0:0:1.356065,0.26,0.78,0.46,11.72,198.7
\2017.9.12_0:0:1.456712,0.37,0.69,0.33,11.74,208.1

두 경우 모두 날짜 문자열 앞에 원하지 않는 문자가 나타납니다. 이것들을 삭제하고 나머지는 모두 유지해야 합니다. 때로는 이러한 아티팩트가 날짜 열이 아닌 다른 열 중 하나에 있는 경우도 있습니다.

나는 다음과 같이 sed를 사용하려고합니다 :

sed 's/[^0-9:_.,]*//g' dat.log > test.log

숫자, 콜론, 밑줄, 점, 쉼표를 제외한 모든 것을 제거하는 것이 목적입니다. 이것은 훌륭하게 작동합니다. 문제는 sed가 개행 문자를 다시 쓰지 않는다는 것입니다. 프로세스 중에 취소된다는 것을 알고 있지만 해당 행이 파일에 기록될 때 어떻게 다시 되돌릴 수 있습니까?

편집하다:예제 입력에 더 많은 줄을 추가하고 sed 명령의 출력을 추가했습니다.

2017.9.12_0:0:0.051920,0.03,0.74,0.09,11.72,182.72017.9.12_0:0:0.152507,0.02,0.82,0.10,11.76,181.82017.9.12_0:0:0.253551,0.00,0.89,0.04,11.77,180.52017.9.12_0:0:0.353267,0.04,0.96,0.02,11.77,182.72017.9.12_0:0:0.453707,0.15,0.95,0.02,11.71,189.32017.9.12_0:0:0.554122,0.18,0.93,0.04,11.76,191.12017.9.12_0:0:0.654682,0.06,0.89,0.10,11.74,184.02017.9.12_0:0:0.755092,0.00,0.89,0.06,11.77,180.52017.9.12_0:0:0.855754,0.02,0.87,0.09,11.76,181.42017.9.12_0:0:0.955123,0.13,0.80,0.23,11.77,189.82017.9.12_0:0:1.055499,0.10,0.82,0.35,11.76,187.62017.9.12_0:0:1.155970,0.18,0.81,0.40,11.74,192.92017.9.12_0:0:1.256581,0.15,0.91,0.44,11.74,189.32017.9.12_0:0:1.356065,0.26,0.78,0.46,11.72,198.72017.9.12_0:0:1.456712,0.37,0.69,0.33,11.74,208.1

편집 2:문제는 Raspberry Pi의 데이터가 Macintosh 데이터 세트를 사용하여 저장된 파일에서 왔다는 것입니다. 이유는 확실하지 않지만 변경 사항을 사용하면 tr '\r' '\n' < macfile.txt > unixfile.txt문제가 해결되었습니다.

답변1

여기서는 다음과 같이 할 수 있는 것 같습니다.

tr -cd '0-9:_.,\r\n' < file.in > file.out

줄 구분 기호를 포함하여 원래 형식을 유지하려는 문자를 제외한 모든 문자를 제거합니다.

답변2

이를 제거하고 명령 tr에 포함시키는 것은 어떻습니까 ?sed

sed 's/\(^\|^M\)[^0-9:_.,]*/\n/g; s/^\n//' file

sed운영 체제 및 버전에 따라 제어 문자(^M, \r, 0x0D) 및 (\n, 0x0A)를 포함합니다 sed.

관련 정보