スクリプトA: 段落冒頭の字下げを全角空白でしてある原稿用
:loop $!N s/\(.\+\)\n\([^ ]\+\)/\1\2/ t loop P D
5−6行目が必要でした。スクリプトBも同様です。(実は、ずーっと以前にこのスクリプトを書いた時には、この形だったのですが、しばらくsedを使わないうちに、すっかり頭がなまっていて、昨年6月にはPとDがどう動くかを忘れていたのです。
は全角空白です。
次の段落の1行目を読み込んだ時、3行目の置換は失敗し、loopを抜けます。
この時、パターンスペースの中身は、
現在の段落\n 次の段落の1行目
という形になってます。
5行目のコマンドPはパターンスペースの「\n」までの部分を出力します。
つまり、2−3行目でつなげられた部分のうち、
現在の段落\n
が出力される訳です。
次いで6行目のコマンドDでパターンスペースの「\n」までの部分を削除します。
この時、パターンスペースには、
次の段落の1行目
が残ります。
コマンドDは処理をスクリプトの先頭に戻します。
sedスクリプトを書く時は、パターンスペースに何が入っているか、よっく考えなければなりませんね。あ〜、難しかった (*_*;
0 件のコメント:
コメントを投稿