戻る
gnuのsedコマンドのマニュアル。
================================
名前
sed - ストリームエディタ
書式
sed [-n] [-V] [--quiet] [--silent] [--version] [--help]
[-e script] [--expression=script]
[-f script-file] [--file=script-file]
[script-if-no-other-script]
[file...]
説明
sed はストリームエディタである。ストリームエディタは、入力
ストリーム (ファイルまたはパイプラインからの入力) に対して
基 本的なテキスト変換を行うために用いられる。 sed は編集ス
クリプトを使える (ed のような) エディタといろいろな面で 似
ているが、 sed は入力に対して 1 パスだけで動作するので、よ
り効率的である。また sed はパイプラインのテキストに対し て
フィルタ動作を行うことができ、この点は他のタイプのエディタ
とはっきり違う。
オプション
sed の起動時には以下のコマンドラインオプションを指定 で き
る。
-V
--version
sed のバージョン・著作権表示を出力し、終了する。
-h
--help コマンドラインオプションを簡単にまとめた利用法とバ
グレポート先のアドレスを出力し、終了する。
-n
--quiet
--silent
デフォルトでは、 sed はスクリプトの各サイクルの最後
で パ ター ンスペースの内容を出力する。これらのオプ
ションを指定するとこの自動的な出力が行われ な く な
り、 p コマンドで出力することを指定された場合に限っ
て sed は出力を生成する。
-e script
--expression=script
script のコマンドを、入力の処理中に行われるコマンド
セットに追加する。
-f script-file
--file=script-file
ファイル script-file に含まれるコマンドを、入力の処
理中に行われるコマンドセットに追加する。
-e, -f, --expression, --file などのオプションがコマンド ラ
インから全く与えられなかった場合は、コマンドラインの引き数
のうち、オプションでない最初のものが script として受け取ら
れ、実行される。
以上のコマンドラインパラメータを処理したあとに引き数が残っ
た場合は、それらは処理対象となる入力ファイルのファイル名と
解 釈される。 - というファイル名は、標準入力ストリームを参
照する。ファイル名が全く指定されなかった場合は標準入力を処
理する。
コマンドの文法
これは sed コマンドのごく簡単な文法で、既に sed を知ってい
る人に対する備忘録程度のものである。完全な記述を求める場合
は他の文書 (texinfo 文書など) にあたること。
アドレスを取らないコマンド
: label
b コマンドと t コマンド用のラベル。
#comment
次 の改行文字まで (あるいは -e スクリプトフラグメン
トの末尾まで) をコメントとして取り扱う。
} { } ブロックの閉じ括弧。
アドレスを 0 または 1 個とるコマンド
= 現在の行番号を表示する。
a \
text text を追加する。 text に改行を含めたい場合は、その
前にバックスラッシュを置く。
i \
text text を挿入する。 text に改行を含めたい場合は、その
前にバックスラッシュを置く。
q これ以上入力の処理を行わず、ただちに sed スクリプト
の 処理を終了する。ただし auto-print が diable され
ていなければ、カレントのパターンスペースが出力さ れ
る。
r filename
テキストを filename から読んで追加する。
アドレス範囲をとりうるコマンド
{ コマンドブロックの開始 (} で終了する)。
b label
label に分岐する。 label が省略された場合は、スクリ
プトの末尾に分岐する。
t label
最後に入力行が読まれ、最後に t コマンドが行われて以
降 に s/// が成功していれば、 label に分岐する。
label が省略された場合は、スクリプトの末尾に分岐 す
る。
c \
text 選択した行を text で置換する。 text に改行を含めた
い場合は、その前にバックスラッシュを置く。
d パターンスペースを削除する。次のサイクルを 開 始 す
る。
D パターンスペースの最初の改行までを削除する。次のサ
イクルを開始するが、パターンスペースにまだデータ が
残っていたら、入力からの読み込みをスキップする。
h H パ ターンスペースをホールドスペースにコピー/追加す
る。
g G ホールドスペースをパターンスペースにコピー/追 加 す
る。
x ホー ル ドスペースとパターンスペースの内容を交換す
る。
l 現在の行を「視覚的に紛れのない」形式でリストする。
n N 入力の次の行をパターンスペースに読み込む/追加する。
p 現在のパターンスペースを出力する。
P 現在のパターンスペースの最初の改行までを出力する。
s/regexp/replacement/
パ ターンスペースに対して regexp のマッチを試みる。
マッチに成功すると、マッチした部分を replacement に
置 換する。 replacement は特殊文字である & を含むこ
とができ、これはパターンスペースのマッチした部分 を
参 照する。また \1 から \9 までの特殊エスケープを含
むこともでき、これは regexp の副表 現 (sub-expres-
sion) にマッチした部分をそれぞれ参照する。
w 現在のパターンスペースを filename に書く。
y/source/dest/
パ ターンスペースにある文字のうち、 source にあるも
のを、 dest の同じ位置にある文字に交換する。
アドレス
sed のコマンドはアドレスを指定せずに与えることもでき、この
場合そのコマンドはすべての入力行に対して実行される。アドレ
スをひとつ与えると、コマンドはそのアドレスにマッチした入力
行 に対してのみ実行される。 2 つのアドレスを与えると、最初
のアドレスにマッチした行から、 2 番目のアドレスにマッチ し
た行に至る範囲 (両マッチ行を含む) にあるすべての行に対して
実行される。アドレスの範囲指定については 3 つのことを注 意
し ておく。まず指定方法は addr1,addr2 である (つまりアドレ
スをコンマで区切る)。 addr1 にマッチした行は、たとえ addr2
が よ り 前 の行にマッチした場合でも、常に処理対象となる。
addr2 が regexp (正規表現) の場合には、 addr1 にマッチした
行に対しては addr2 のマッチは行われない。
アドレス (あるいはアドレス範囲) とコマンドの間には ! を挟
むことができる。この場合は、アドレス (あるいはアドレ ス 範
囲) がマッチしなかった行に対してのみコマンドが実行される。
以下のアドレスタイプがサポートされている。
number number で指定した行だけにマッチする。
first~step
first 行からはじまる step 行おきの行にマッチす る。
例 え ば ``sed -n 1~2p'' は入力行のうち奇数行を表示
し、アドレスを 2~5 にすると、第 2 行から 5 行おきに
表示する (これは GNU の拡張である)。
$ 最終行にマッチする。
/regexp/
正規表現 regexp にマッチした行にマッチする。
\cregexpc
正 規表現 regexp にマッチした行にマッチする。文字 c
は何でもよい。
正規表現
POSIX.2 BRE をサポートすべきであるが、まだ完全にはサポート
できていない。正規表現内部の \n シーケンスは改行文字にマッ
チする。 GNU 拡張も存在する。 [要修正: より詳細を記述す る
必要がある。少なくとも、何がサポートされているかを述べた、
他の文書へのリファレンスが必要である]
その他の注意
このバージョンの sed は、あらゆる正規表現の内部・置換コ マ
ン ドの replacement の内部・文字交換 (y) コマンドの source
および dest の内部のいずれにおいても、 \ と い う
シーケンスが使える。
関連項目
awk(1), ed(1), expr(1), emacs(1), perl(1), tr(1), vi(1),
regex(5) [うーん、書かないとダメですねえ] 【訳注: LDP には
regex(7) があります】, sed.info, sed に関する様々な本のい
ずれか, the sed FAQ (http://www.wollery.demon.co.uk/sed-
tut10.txt, http://www.ptug.org/sed/sedfaq.htm).
バグ
バグレポートは bug-gnu-utils@gnu.org まで送って下さい。
「Subject:」フィールドのどこかに「sed」という単語を入れる
ようにして欲しい。
#############################################
個人的メモ:
改行をスペースに置換
sed ':loop; N; $!b loop; s/\n/ /g'