sedのコマンドの使い方には、シェルコマンド行に直接sedのコマンド(スクリ プト)を書く場合と、ファイルにスクリプトを書いておいてそれを呼び出す形 式とがあります。ちょっとしたことには前者が手間がかからなくていいわけで すし、何度も繰り返すものについてはファイルにしておいたほうが楽かも知れ ません。
% sed -e {スクリプト} {入力ファイル} % sed -f {スクリプトファイル} {入力ファイル}
この場合の出力先は標準出力にされます。結果をファイルに残したいときはリ ダイレクトすることになります。>出力ファイル名をコマンドのあとに付けれ ばいいわけです。ではさっそく試してみましょう。
とりあえずファイルの中身をそのまま出力します。
% sed -e p test.txt
この例ではtest.txtというテキストファイルが処理の対象です。何でもいいの で適当にやってみてください。ここで-eはこの次の引数がスクリプトであるこ とを表しています。この-eは省略できます。つぎのpがスクリプトで、プリン トしなさいという意味です。不思議なことにtest.txtの中身が2度づつ表示さ れました。これはsedが入力行をデフォールトで出力するうえに、pスクリプト によって全部の行を表示せよと指示された結果だからです。これはちょっと困 ります。そこでデフォールト出力を禁止します。
% sed -n -e p test.txt
ここで-nがデフォールト出力抑制のスイッチです。コマンドpは全部の行を表 示します。実はpの前に範囲が指定されていないので全域を対象としました。 色々な範囲指定の仕方があります。
% sed -n -e 1,5p test.txt % sed -n -e '15,$p' test.txt % sed -n -e /sakanaya/p test.txt % sed -n -e /begin/,/end/p test.txt
最初の例では1行目から5行目までを範囲とします。次は15行目から最後($で表 す)までを範囲とします。その次の例はsakanayaという文字列を含む行をすべ て、最後の例ではbeginを含む行からendを含む行までを範囲とします。ファイ ルの中身を調べるためにも非常に重宝です。メイルの中からPostscriptやTeX のデータだけを取り出すには、
% sed -n -e '/%\!PS/,$p' tsdemo.txt > psdemo.ps % sed -n -e '/\\ documentstyle/,$p' texdemo.txt > texdemo.tex
最初の例はPostscriptファイルが通常%!PS-Adobeというコメント行で始まっ
ていることを使っています。TeX の場合は最初の行は
documentstyle文である
ことからこのような方法が使えます。(もちろんその前にコメントを書いてあ
る場合もありますが...)