2010年6月15日

行連結sedスクリプト

私がつくっているのは新聞形式なので、一つ一つの記事は短いのです。そのため、原稿をメール本文で遣り取りすることがあります。

また、記事の中の段落も短く、SMTPの行長制限(1,000chracters)を超えることもあまりないのですが、メーラーが自動的に78桁以下に改行して送信してくることもあるし、古くからインターネットを使っている著者が、手ずから改行して送ってくれることもあります。

でも、それを組版するには、段落内の行を連結し直さなくてはなりません。もともと短い記事だから、手作業でもそれほど手間ではないのですが、ものぐさな私はそれをsedにさせてます。


★2011.11.18訂正:「P」と「D」を実行しないと、各段落の1行目が処理されなようです。そういえばはじめてこのスクリプを書いた時、この二つのコマンドを使った記憶があるのですが、長い間使ってなくて、思い出しながら書いたら、案の定、抜けてました。


スクリプトA: 段落冒頭の字下げを全角空白でしてある原稿用
:loop
$!N
s/\(.\+\)\n\([^ ]\+\)/\1\2/
t loop
P
D

 は全角空白です。

スクリプトB: 段落冒頭の字下げをしないで、空行で段落を区切ってある原稿用
:loop
$!N
s/\(.\+\)\n\(.\+\)/\1\2/
t loop
P
D

ほんとのことを言うと、MacOSXを仕事に使いだしてから、sedはあまり使わなくなっていたんです。この行連結スクリプトは、ずーっと以前(10年近く前?)、FreeBSDで編集作業をしていたころ使っていたもの。

最近になって、紙の新聞に加えてWeb版を公開することになり、そうなると、元の記事からWeb用にふさわしい表記に書き換える作業(全角数字を半角数字に書き換えるなど)が出てきました。それで、sedの出番となり、そのついでに記憶の底から引き出してきたのがこの行連結スクリプトです。

googleで検索してみても、行連結のsedスクリプトは見つけにくいので、ひょっとしたら誰かの役に立つかもと、ここに掲載する次第です。

0 件のコメント: