次の行の前にスペースまたは改行文字を追加する必要があり、次の行がスペースで始まる場合は無視する必要があります。
私の入力ファイルは次のとおりです
#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
このコマンドは2つのテストを使用します。両方のテストがある場合本物、空行を挿入します。
- テスト
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