파일 구조:
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 태그 로 다시 분기되어 세 번째 파이프를 다시 찾습니다.N
s///
t
sed
:d