• twitter
  • facebook
文学・歴史資料のデジタル加工入門

大量置換のためのツール sed を用いて その1【文学・歴史資料のデジタル加工入門10】 (木越 治)

●sed の利用法

さて、今回のメインは、大量の置換をするときに便利な sed の使い方である。
このツールも awk 同様、置換パターンをファイルにしておいて(この場合のスクリプトの拡張子は「sed」としておく)、それを利用するという方法を取ると考えてよい。

sed における置換の基本的コマンドは、以下の二つである。

1. s/(置換前の文字パターン)/(置換後の文字パターン)/g

s コマンドによる置換は、一パターンごとに置換するものを指定するような場合に用いる。前者が五文字、後者が三文字というのでもかまわない。最後の「g」は、同じパターが1行のうちにあれば、全部置換するという意味である。/1 なら、1番目に出るもの、/2 なら2番目に出てきたものだけを置換するという指定になるが、そういう置換を必要とする局面に遭遇した経験はない。だから、s コマンドによる置換では最後に「g」を指定するものだと思っていてかまわないだろう。

2.y/(置換前の文字パターン1)(置換前の文字パターン2)(置換前の文字パターン3)/(置換後の文字パターン1)(置換後の文字パターン2)(置換後の文字パターン3)/

y コマンドによる置換は、一文字ずつ対応している置換パターンを列挙していく場合に有効である。なお、このコマンドに「g」を付ける必要はない。sed のバージョンによっては、「g」があるとエラーになることもある。

次のスクリプトは、旧字体の漢字と新字体の漢字を置換するためのもので、yコマンドを利用している。

======================================================

y/亞惡壓圍醫爲壹飮隱鬱營榮衞驛圓艷/亜悪圧囲医為壱飲隠欝営栄衛駅円艶/
y/鹽奧應歐毆穩櫻假價畫屆會壞懷繪擴/塩奥応欧殴穏桜仮価画届会壊懐絵拡/
y/覺學嶽樂殼勸卷歡罐觀關巖顏凾陷歸/覚学岳楽殻勧巻歓缶観関巌顔函陥帰/
y/氣龜僞戲犧舊據擧峽挾狹曉區驅勳徑/気亀偽戯犠旧拠挙峡挟狭暁区駆勲径/
y/惠溪經繼莖螢輕鷄藝缺儉劍圈檢權獻/恵渓経継茎蛍軽鶏芸欠倹剣圏検権献/
y/縣險顯驗嚴效據廣恆鑛號國濟碎齋册/県険顕験厳効拠広恒鉱号国済砕斎冊/
y/劑雜參蠶棧慘讚贊殘齒兒辭濕實舍寫/剤雑参蚕桟惨讃賛残歯児辞湿実舎写/
y/釋壽收龝從澁獸縱肅處敍奬將燒稱證/釈寿収穐従渋獣縦粛処叙奨将焼称証/
y/乘剩壤孃條淨疊穰讓釀觸寢愼晉眞盡/乗剰壌嬢条浄畳穣譲醸触寝慎晋真尽/
y/繩圖粹醉穗隨髓數樞聲靜齊竊攝專戰/縄図粋酔穂随髄数枢声静斉窃摂専戦/
y/淺濳纖踐錢禪壯雙搜插爭總聰莊裝騷/浅潜繊践銭禅壮双捜挿争総聡荘装騒/
y/臟藏屬續墮體對帶滯臺擇澤單擔膽團/臓蔵属続堕体対帯滞台択沢単担胆団/
y/彈斷遲癡晝蟲鑄廳聽鎭遞鐵轉點傳兔/弾断遅痴昼虫鋳庁聴鎮逓鉄転点伝兎/
y/黨當盜燈稻鬪獨讀貳惱腦廢拜賣麥發/党当盗灯稲闘独読弐悩脳廃拝売麦発/
y/髮拔蠻濱拂佛變竝篦邊辨餠舖寶豐冐/髪抜蛮浜払仏変並箆辺弁餅舗宝豊冒/
y/沒萬滿默來亂彌藥譯豫餘與譽搖樣謠/没万満黙来乱弥薬訳予余与誉揺様謡/
y/覽兩獵壘勵禮靈齡戀爐勞樓瀧祿蘆灣/覧両猟塁励礼霊齢恋炉労楼滝禄芦湾/
y/祕囑劵敕豎廚禰/秘嘱券勅竪厨祢/

======================================================

これをかりに「q2shin.sed」としておく。実行すると、「亞」が「亜」に、「淺」が「浅」に置換されるわけである。こころみに、このスクリプトを利用して、『伊勢物語』第四段の、次のような本文ファイルを扱う場合を考えてみよう。

======================================================


むかし、東の五條に大后の宮おはしましける、西の對に住む人有(り)けり。それを本意にはあらで心ざしふかゝりける人、行きとぶらひけるを、む月の十日ばかりのほどに、ほかにかくれにけり。ありどころは聞けど、人の行き通ふべき所にもあらざりければ、猶憂しと思ひつゝなんありける。又の年のむ月に、むめの花ざかりに、去年を戀ひて行きて、立ちて見、ゐて見見れど、去年に似るべくもあらず。うち泣きて、あばらなる板敷に月のかたぶくまでふせりて、去年を思(ひ)いでてよめる。
月やあらぬ春や昔の春ならぬわが身ひとつはもとの身にして
とよみて、夜のほの※※と明くるに、泣く++歸りにけり。

======================================================

このファイルに対してほどこしたい作業は、とりあえず、下記の二つである。

  1. 「條」「對」など、いくつか旧漢字が用いられているので、それを新漢字に直す
  2.  踊り字として使っている記号を、自分用に取り決めてある記号に直す。

すなわち、

「++」 は /\
「※※」 は %\

印刷のことを考えると踊り字は「〳〵」や「〴〵」を使うほうがきれいだが、これらは shiftJIS コードにはないため、印刷をしたいときに置換するしかない。
後者の置換については、前掲「q2shin.sed」のうしろに、

s/++//\/g
s/※※/%\/g

という二行を書き足せばよい。これを、「q2shin-2.sed」として保存し、『伊勢物語』のファイルは「ise-4.txt」として保存してから、早速この置換を実行してみよう。コマンドラインは、

>sed -f q2shin-2.sed ise-4.txt

である。
なお、MS-DOS のコマンドラインを使うときは、 Windows のように漢字名の長いファイル名にしないで、半角(1バイト)のアルファベット・記号(「-」や「_」程度にとどめておくこと。他の記号はコマンド入力の時や正規表現の時につかうことがある)・数字にしておくべきである。漢字ファイル名入力の手間をさけるためである。

以下がその結果である。

======================================================


むかし、東の五条に大后の宮おはしましける、西の対に住む人有(り)けり。それを本意にはあらで心ざしふかゝりける人、行きとぶらひけるを、む月の十日ばかりのほどに、ほかにかくれにけり。ありどころは聞けど、人の行き通ふべき所にもあらざりければ、猶憂しと思ひつゝなんありける。又の年のむ月に、むめの花ざかりに、去年を恋ひて行きて、立ちて見、ゐて見見れど、去年に似るべくもあらず。うち泣きて、あばらなる板敷に月のかたぶくまでふせりて、去年を思(ひ)いでてよめる。
月やあらぬ春や昔の春ならぬわが身ひとつはもとの身にして
とよみて、夜のほの%\と明くるに、泣く/\帰りにけり。

======================================================

となる。

ただし、ここまでやるのであれば、さらに、

有(り)けり。 → ありけり。
む月 → 正月(むつき)
猶 → なほ
又の → またの
思(ひ)いでて → 思ひ出でて

というふうに手を入れていきたいところである。が、このへんになると、『伊勢物語』第四段だけでなく、『伊勢物語』全体から置換したいパターンをすべて取り出して、それを一括で処理したくなる。そうなると、『伊勢物語』全文を読んでいかないといけない。が、これは、この原稿1回分を書くよりもたいへんな仕事になるので、なかなか踏み切れないでいる。が、いつか時間ができたときに、こういう作業をほどこしたうえで、できれば、青空文庫の形式に統一し、web上で公開したいものだと考えている。