현재 간단한 텍스트 파일을 구문 분석하기 위해 bash 스크립트를 작성 중입니다. 지금 내가 겪고 있는 문제는 있어서는 안 될 새로운 줄이 나타난다는 것입니다. 예를 들어보겠습니다
Q1bcd 3 - 4 --- --- --- Ba Klasse hat Aufgab..
8 a 3 --- --- Mr
6 b 3 - 4 --- --- --- Bu Unterricht im
Klassenverband
8 a 4 --- --- Ke
7 a 4 De Bi r24 La
"Klassenverband" 문자열이 새 줄에 있습니다. 나는 이것을 원하지 않습니다. 새 줄 문자를 제거하기 위해 sed 및 awk를 사용하여 다른 명령을 실행해 보았습니다.
awk '/^\([a-zA-Z]\{4\}\)/{printf "%s ",$0;next} 1' file
sed '/^\([a-zA-Z]\{4\}\)/{N;s/\n//;}' file
지금까지 내가 생각한 것은 다음 정규식을 사용하여 필요한 모든 문자열을 추출할 수 있다는 것입니다.
^\([a-zA-Z]\{4\}\)
나는 이런 결과를 기대하고있다
Q1bcd 3 - 4 --- --- --- Ba Klasse hat Aufgab..
8 a 3 --- --- Mr
6 b 3 - 4 --- --- --- Bu Unterricht im Klassenverband
8 a 4 --- --- Ke
7 a 4 De Bi r24 La
편집하다: 이것은 나에게 효과적입니다. 하지만 텍스트 파일은 DOS 파일이 아닌 Unix 텍스트 파일이어야 합니다.
sed '$!N; s/\n\([[:alpha:]]\{4,\}\)/ \1/; P;D' file
답변1
어때요?
sed '$!N; s/\n\([[:alpha:]]\{4,\}\)/ \1/; P;D' file
Q1bcd 3 - 4 --- --- --- Ba Klasse hat Aufgab..
8 a 3 --- --- Mr
6 b 3 - 4 --- --- --- Bu Unterricht im Klassenverband
8 a 4 --- --- Ke
7 a 4 De Bi r24 La
답변2
의 경우 perl
입력 파일이 메모리에 들어갈 만큼 작다고 가정합니다.
perl -0777 -pe 's/\n([a-zA-Z]{4})/ $1/g' file.txt
답변3
이것은 서투른 일입니다. 아마도 더 좋은 방법이 있을 것입니다.
awk '{ c=""; if (NR!=1 && !/^[a-zA-Z]{4}/) { c="\n" }; printf("%s%s",c,$0) } END { print "" }'
기본적으로 각 줄을 인쇄합니다.아니요LF 캐릭터. 그럼 우리는 할 수 있어접두사이 줄을 병합하지 않으려면 다음 줄에 LF를 추가하세요.
마지막으로 이는 마지막 줄에 마지막 LF가 누락되었음을 의미하므로 추가합니다.