next up previous contents
Next: 文字や文字列の変更や消去 Up: sedを使う Previous: sedを使う

基本的な使い方・一部の行の取り出し

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文である ことからこのような方法が使えます。(もちろんその前にコメントを書いてあ る場合もありますが...)



next up previous contents
Next: 文字や文字列の変更や消去 Up: sedを使う Previous: sedを使う



Kinya Hibino
Wed Apr 26 21:42:06 JST 1995