문자 시퀀스가 ​​나올 때까지 여러 줄을 병합합니다.

문자 시퀀스가 ​​나올 때까지 여러 줄을 병합합니다.

메시지 문자열이 끝이 없으면 여러 줄을 병합해 보세요. 또한 첫 번째 줄을 제외한 모든 줄에서 접두사를 제거하고 싶습니다.

입력하다:

b929e3e1-29db this is a long message that
abc074df-48a1 is continued onto multiple
dfd4c683-ab48 lines#EOM
ff513a72-570d this is a short message#EOM
980d10aa-bbed another short message#EOM

산출:

b929e3e1-29db this is a long message that is continued onto multiple lines
ff513a72-570d this is a short message
980d10aa-bbed another short message

명령줄을 통해 사용할 수 있는 일반 도구를 사용하는 것이 가장 좋습니다. (예: awk, sed)

답변1

GNU awk1 사용

gawk -vRS='#EOM\n' '{gsub(/\n[[:xdigit:]-]+/,"");} {$1=$1} 1' file.txt
  • 레코드 구분 #EOM기호 뒤에 개행 문자가 오도록 설정하세요.
  • 개행 문자 앞의 16진수 및 하이픈 시퀀스를 제거하면 이전 RS가 개행 문자를 먹었으므로 각 레코드의 초기 시퀀스가 ​​유지됩니다.
  • $1=$1기본 출력 구분 기호를 사용하여 레코드를 강제로 재평가하도록 필드를 재할당합니다.
  • 기록을 인쇄하세요( 1사실이기 때문에)

시험

$ gawk -vRS='#EOM\n' '{gsub(/\n[[:xdigit:]-]+/,"");} {$1=$1} 1' file.txt
b929e3e1-29db this is a long message that is continued onto multiple lines
ff513a72-570d this is a short message
980d10aa-bbed another short message


1. 이해할 수 없는 이유로 교체 및 기타 다양한 조정 mawk후에도 작동하지 않는 것 같습니다 )+\{1,\}

관련 정보