다음 줄에 공백이나 개행 문자를 추가하세요.

다음 줄에 공백이나 개행 문자를 추가하세요.

다음 줄 앞에 공백이나 개행 문자를 추가해야 하며, 다음 줄이 공백으로 시작하면 무시해야 합니다.

내 입력 파일은 다음과 같습니다

#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 ""모든 조건이 충족되면 개행 인쇄
  • 1print실제 상황에서의 약어

산출

#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

관련 정보