ファイルのすべての空白行の後に、すべての行の先頭に「$」文字を追加する簡単な方法を探しています。例:入力ファイル
text1
text2
text3
text4
text5
出力ファイルの例:
text1
$text2
text3
$text4
text5
lines
それがあなたの行のリストであると仮定します:
fixit = False
for line in lines:
if fixit and line.strip():
line = "$" + line
fixit = (line.strip() == "")
print line
これfixit = (line.strip() == "")
は、現在の行が空白かどうかをチェックするテストです [.strip
メソッドは、行の最初と最後にあるすべての空白文字 ( " "
、"\n"
、...) を削除します]。
行に 2 つの空行がある場合、 は 2 番目の空行の先頭に a を出力するif fixit and line.strip()
ことを回避します。$
awk '{print}; ""~$0 {getline; print "$" $0}' input_file
与える
text1
$text2
text3
$text4
text5
更新:
複数の連続する空白を処理するように適合:
awk '""~$0 {flag=1; print; next}; flag {printf "$"; flag=0} 1'
試す
sed 'N;s/^\s*\n/&$/;P;D' inputfile
print open("input.txt").read().replace('\n\n', '\n\n$')
GNU sedの別の方法:
sed -rn '1 h; 1!H; $ {x; s/(\n\n)(.)/\1$\2/g; p}' infile
そしてコメント付き:
sed -rn '
1h # First collect all input
1!H # in the hold space
$ {
x # Swap hold space and pattern space
s/(\n\n)(.)/\1$\2/g # Globally insert $ after empty lines
p # Print the result
}'
コメントのpotongが指摘しているように、このソリューションはすべての入力をメモリにロードしますが、入力のサイズによっては問題が発生する可能性があります。