파일 중간에 줄 바꿈을 제거하는 방법은 무엇입니까?

파일 중간에 줄 바꿈을 제거하는 방법은 무엇입니까?

파일 구조:

Col1|Col2|Col3|Col4
123|456|abcdefg
Tel.: 689346589934, xyz
lckhasfkl|abc

"col3"에서 개행 문자를 제거하고 싶습니다. 제안해주세요

답변1

$ sed -e :1 -e '/|.*|.*|/!{N;b1' -e '}' -e 's/\n/ /g' < your-file
Col1|Col2|Col3|Col4
123|456|abcdefg Tel.: 689346589934, xyz lckhasfkl|abc

또는 awk동등하게:

awk -F '|' '{while (NF<4) {getline more; $0 = $0 " " more};print}' < your-file

둘 다얻다|다음 줄을 입력하고 줄에 추가하고 줄에 최소 3 자(4개 필드)가 포함되지 않는 한 공백을 추가합니다 .

다른 필드(네 번째 필드 제외, 그렇지 않으면 새 레코드가 시작되는 위치를 알 수 없음)에 개행 문자가 포함될 수 있고 세 번째 필드의 개행 문자만 바꾸려는 경우:

sed '
 :1
 /|.*|.*|/!{
   N;b1
 }
 :2
 s/\n\([^|]*|[^|]*$\)/ \1/
 t2' < your-file

또는:

awk -F '|' -v OFS='|' '
  {
    while (NF < 4) {getline more; $0 = $0 "\n" more}
    gsub("\n", " ", $3)
    print
  }' < your-file

답변2

다른 sed:

sed -e:d -e's/|/|/3;t' -e'N;s/\n//;td' < in >out

sed루프는 한 줄의 세 번째 파이프 문자를 자신으로 대체하여 구현됩니다. 교체가 t성공 하면 sed분기가 남게 되어 패턴 공간이 자동으로 인쇄되고 스크립트는 다음 입력 줄(있는 경우)부터 맨 위에서 시작됩니다. 그러나 실패하면 ext 줄이 패턴 공간에 sed추가되어 중간에 줄 바꿈 구분 기호가 대체됩니다. 그런 다음 두 번째 est가 전달되고 elim 태그 로 다시 분기되어 세 번째 파이프를 다시 찾습니다.Ns///tsed:d

관련 정보