在下一行添加空格或换行符

在下一行添加空格或换行符

需要在下一行之前添加空格或换行符,如果下一行以空白开头,则必须忽略。

我的输入文件如下所示

#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

相关内容