0

ファイルのすべての空白行の後に、すべての行の先頭に「$」文字を追加する簡単な方法を探しています。例:入力ファイル

text1  

text2    
text3  

text4  
text5 

出力ファイルの例:

text1  

$text2    
text3  

$text4  
text5
4

5 に答える 5

3

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()ことを回避します。$

于 2012-09-02T13:35:11.910 に答える
2
awk '{print}; ""~$0 {getline; print "$" $0}' input_file

与える

text1

$text2
text3

$text4
text5

更新:
複数の連続する空白を処理するように適合:

awk '""~$0 {flag=1; print; next}; flag {printf "$"; flag=0} 1'
于 2012-09-02T13:42:37.020 に答える
2

試す

sed 'N;s/^\s*\n/&$/;P;D' inputfile
于 2012-09-02T13:34:54.577 に答える
2

print open("input.txt").read().replace('\n\n', '\n\n$')

于 2012-09-02T13:38:11.880 に答える
1

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が指摘しているように、このソリューションはすべての入力をメモリにロードしますが、入力のサイズによっては問題が発生する可能性があります。

于 2012-09-02T16:34:43.060 に答える