다음 줄 앞에 공백이나 개행 문자를 추가해야 하며, 다음 줄이 공백으로 시작하면 무시해야 합니다.
내 입력 파일은 다음과 같습니다
#qwert TRWQQA 01 40 /* this is the sample test */
/* STILL COMING UP... AFTER UP ENQ GOES AWAY */
/* FEB AND 30TH */
#TFCDF DWERTY 01 40 (FEB AND 30TH)
/* AND (qwert-01 01 #qwert OR */
/* (START SCD RTGFG))
XDYGH #qwert */
#HYUOIK YUPOIH 01 40 FEB AND 30TH
/* AND (qwert-01 01 #qwert OR */
/* (START SCD qwert))
SDFGH #qwert */
#NHUYUOI GHTYHD 01 40 (FEB AND 30TH) AND (qwert-01 01 #qwert OR
(START SCD SDFRE))
#KJYY ERTYUB 01 40 (FEB AND 30TH) AND (qwert-01 03 #qwert OR
(START SCD DERF))
RTYUH POMHY 01 40 ERTYUJ RTYUJ
QWERG PIJHGV 01 40 MNBV LKJH
예상 출력.
#qwert TRWQQA 01 40 /* this is the sample test */
/* STILL COMING UP... AFTER UP ENQ GOES AWAY */
/* FEB AND 30TH */
#TFCDF DWERTY 01 40 (FEB AND 30TH)
/* AND (qwert-01 01 #qwert OR */
/* (START SCD RTGFG))
XDYGH #qwert */
#HYUOIK YUPOIH 01 40 FEB AND 30TH
/* AND (qwert-01 01 #qwert OR */
/* (START SCD qwert))
SDFGH #qwert */
#NHUYUOI GHTYHD 01 40 (FEB AND 30TH) AND (qwert-01 01 #qwert OR
(START SCD SDFRE))
#KJYY ERTYUB 01 40 (FEB AND 30TH) AND (qwert-01 03 #qwert OR
(START SCD DERF))
RTYUH POMHY 01 40 ERTYUJ RTYUJ
QWERG PIJHGV 01 40 MNBV LKJH **strong text**
답변1
POSIX awk를 사용하십시오.
$ awk '{print (/^[[:blank:]]/ ? "" : sep) $0; sep=ORS}' file
#qwert TRWQQA 01 40 /* this is the sample test */
/* STILL COMING UP... AFTER UP ENQ GOES AWAY */
/* FEB AND 30TH */
#TFCDF DWERTY 01 40 (FEB AND 30TH)
/* AND (qwert-01 01 #qwert OR */
/* (START SCD RTGFG))
XDYGH #qwert */
#HYUOIK YUPOIH 01 40 FEB AND 30TH
/* AND (qwert-01 01 #qwert OR */
/* (START SCD qwert))
SDFGH #qwert */
#NHUYUOI GHTYHD 01 40 (FEB AND 30TH) AND (qwert-01 01 #qwert OR
(START SCD SDFRE))
#KJYY ERTYUB 01 40 (FEB AND 30TH) AND (qwert-01 03 #qwert OR
(START SCD DERF))
RTYUH POMHY 01 40 ERTYUJ RTYUJ
QWERG PIJHGV 01 40 MNBV LKJH
답변2
awk
공백으로 시작하지 않는 모든 줄 앞에 줄을 추가하는 데 사용됩니다 (단, 첫 번째 줄에서는 이 작업을 수행하지 마세요).
awk 'NR != 1 && /^[^[:blank:]]/ { print "" }; 1' file
이 명령은 두 가지 테스트를 사용합니다. 두 가지 테스트가 모두 있는 경우진짜, 빈 줄을 삽입하십시오.
- 테스트
NR != 1
는진짜현재 줄이 첫 번째 줄이 아닌 경우. 이렇게 하면 첫 번째 줄이 공백이 아닌 것으로 시작하는 경우 출력 시작 부분에 빈 줄을 추가하지 않습니다. - 테스트
/^[^[:blank:]]/
는진짜현재 줄이 공백이 아닌 문자로 시작하는 경우. 여기서 "공백 문자"는 공백이나 탭 문자를 의미하며, 로케일에 따라 세트에 다른 공백 문자가 포함될 수 있습니다.
후행을 사용하면 1
현재 행이 무조건 출력됩니다( 의 축약형입니다 { print }
).
답변3
이와 같이 GNU를 사용하면 다음과 같습니다 awk
.
$ awk 'NR > 1 && /^\S/{print ""}1' file
NR > 1
첫 번째 줄 바꿈을 방지하려면 첫 번째 줄 뒤에서 시작하세요.&&
그리고/^\S/
공백이 아닌 것으로 시작print ""
모든 조건이 충족되면 개행 인쇄1
print
실제 상황에서의 약어
산출
#qwert TRWQQA 01 40 /* this is the sample test */
/* STILL COMING UP... AFTER UP ENQ GOES AWAY */
/* FEB AND 30TH */
#TFCDF DWERTY 01 40 (FEB AND 30TH)
/* AND (qwert-01 01 #qwert OR */
/* (START SCD RTGFG))
XDYGH #qwert */
#HYUOIK YUPOIH 01 40 FEB AND 30TH
/* AND (qwert-01 01 #qwert OR */
/* (START SCD qwert))
SDFGH #qwert */
#NHUYUOI GHTYHD 01 40 (FEB AND 30TH) AND (qwert-01 01 #qwert OR
(START SCD SDFRE))
#KJYY ERTYUB 01 40 (FEB AND 30TH) AND (qwert-01 03 #qwert OR
(START SCD DERF))
RTYUH POMHY 01 40 ERTYUJ RTYUJ
QWERG PIJHGV 01 40 MNBV LKJH
답변4
다음 을 사용하여 perl
시퀀스에 개행 문자를 추가할 수 있습니다.줄 바꿈 후 공백 없음:
perl -e 'local $/; $_ = <>; s/(\n[^[:space:]])/\n$1/g; print' file