sed를 사용한 간단한 회선 연결 문제

sed를 사용한 간단한 회선 연결 문제

데이터세트 이름과 날짜/시간이 포함된 대용량 파일이 있습니다.

ss:Type="String">EDII.HA5274.FNS99R.R999999.LFN5913.G1795V00</Data>
ss:Type="DateTime">2022-12-28T00:00:00.000</Data>
ss:Type="DateTime">1899-12-31T23:50:14.000</Data>
ss:Type="String">EDII.HA5273.FNS9901R.R999999.LFN5913.G1796V00</Data>
ss:Type="DateTime">2022-12-29T00:00:00.000</Data>also,
ss:Type="DateTime">1899-12-31T23:43:35.000</Data>

"String"이라는 단어 뒤에 오는 줄을 연결하고 싶습니다.

내 최종 결과는 다음과 같습니다

ss:Type="String">EDII.HA5274.FNS99R.R999999.LFN5913.G1795V00</Data>ss:Type="DateTime">2022-12- 28T00:00:00.000</Data>
ss:Type="DateTime">1899-12-31T23:50:14.000</Data>
ss:Type="String">EDII.HA5273.FNS9901R.R999999.LFN5913.G1796V00</Data>ss:Type="DateTime">2022- -29T00:00:00.000</Data>
ss:Type="DateTime">1899-12-31T23:43:35.000</Data>

내 솔루션:

cat The_File.txt| sed 's/\(^.*String.*$\)\r\n/\1/g'

아무것도 하지 않았습니다. "\r\n"은 올바른 eol 문자입니다. 내 텍스트 편집기에서 볼 수 있습니다.

지금 막혔어요..

어떤 조언이라도 도움이 될 것입니다. 또한... 내 솔루션에 문제가 있나요?

감사해요

답변1

나는 사용할 것이다. 줄에 "String"이 포함되어 있으면 개행 문자 없이 인쇄하고, 그렇지 않으면 개행 문자를 사용하세요.

awk '
    BEGIN {FS = "\""; RS = "\r\n"}
    {printf "%s%s", $0, $2 == "String" ? "" : RS}
' The_File.txt

답변2

기본적으로 sed는 한 번에 한 줄씩 로드하고 처리합니다.

두 번째 행을 로드하려면 이 N지시어를 사용할 수 있습니다. 그런 다음 줄 끝 문자를 빈 문자열(또는 선택한 다른 연결 문자열)로 바꿀 수 있습니다.

그래서

sed '/"String"/{N;s/\r\n//;}' TheFile.txt

답변3

이것은 MacO에서 작동합니다.

gsed '/String/{N;s/\r\n//}'

이는 Windows 시스템의 Cygwin bash와 함께 작동하지만 Linux 시스템에서도 작동합니다.

sed '/"String"/{N;s/\r\n//;}' 

관련 정보