sed - コマンド (プログラム) の説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- オプション
- コマンドの文法
- アドレス
- 正規表現
- その他の注意
- 関連項目
- バグ
名前
書式
sed [-n] [-V] [--quiet] [--silent] [--version] [--help]
[-e script] [--expression=script]
[-f script-file] [--file=script-file]
[script-if-no-other-script]
[file...]
説明
(sd はストリームエディタである。
ストリームエディタは、入力ストリーム
(ファイルまたはパイプラインからの入力)
に対して基本的なテキスト変換を行うために用いられる。
(sd は
編集スクリプトを使える (ed
のような) エディタと
いろいろな面で似ているが、
(sd は入力に対して 1 パスだけで動作するので、より効率的である。
また (sd はパイプラインのテキストに対してフィルタ動作を行うことができ、
この点は他のタイプのエディタとはっきり違う。
オプション
(sd の起動時には以下のコマンドラインオプションを指定できる。
-
-V
-
-
--version
-
sed のバージョン・著作権表示を出力し、終了する。
-
-h
-
-
--help
-
コマンドラインオプションを簡単にまとめた利用法と
バグレポート先のアドレスを出力し、終了する。
-
-n
-
-
--quiet
-
-
--silent
-
デフォルトでは、
(sd はスクリプトの各サイクルの最後でパターンスペースの内容を出力する。
これらのオプションを指定するとこの自動的な出力が行われなくなり、
p
コマンドで出力することを指定された場合に限って
(sd は出力を生成する。
-
-e script
-
-
--expression=
script
-
script
のコマンドを、入力の処理中に行われるコマンドセットに追加する。
-
-f script-file
-
-
--file=
script-file
-
ファイル
script-file
に含まれるコマンドを、入力の処理中に行われるコマンドセットに追加する。
-e
,
-f
,
--expression
,
--file
などのオプションがコマンドラインから全く与えられなかった場合は、
コマンドラインの引き数のうち、オプションでない最初のものが
script
として受け取られ、実行される。
以上のコマンドラインパラメータを処理したあとに引き数が残った場合は、
それらは処理対象となる入力ファイルのファイル名と解釈される。
-
というファイル名は、標準入力ストリームを参照する。
ファイル名が全く指定されなかった場合は標準入力を処理する。
コマンドの文法
これは (sd コマンドのごく簡単な文法で、
既に sed を知っている人に対する備忘録程度のものである。
完全な記述を求める場合は他の文書 (texinfo 文書など) にあたること。
アドレスを取らないコマンド
-
:
label
-
b
コマンドと
t
コマンド用のラベル。
-
#
comment
-
次の改行文字まで (あるいは
-e
スクリプトフラグメントの末尾まで) をコメントとして取り扱う。
-
}
-
{ } ブロックの閉じ括弧。
アドレスを 0 または 1 個とるコマンド
-
=
-
現在の行番号を表示する。
-
a \
-
-
text
-
text
を追加する。
text
に改行を含めたい場合は、その前にバックスラッシュを置く。
-
i \
-
-
text
-
text
を挿入する。
text
に改行を含めたい場合は、その前にバックスラッシュを置く。
-
q
-
これ以上入力の処理を行わず、ただちに (sd スクリプトの処理を終了する。
ただし 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-expression) にマッチした部分をそれぞれ参照する。
-
w
filename
-
現在のパターンスペースを
filename
に書く。
-
y/
source
/
dest
/
-
パターンスペースにある文字のうち、
source
にあるものを、
dest
の同じ位置にある文字に交換する。
アドレス
(sd のコマンドはアドレスを指定せずに与えることもでき、
この場合そのコマンドはすべての入力行に対して実行される。
アドレスをひとつ与えると、
コマンドはそのアドレスにマッチした入力行に対してのみ実行される。
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
にマッチした行にマッチする。
-
\c
regexp
c
-
正規表現
regexp
にマッチした行にマッチする。
文字
c
は何でもよい。
正規表現
POSIX.2 BRE
をサポートすべきであるが、まだ完全にはサポートできていない。
正規表現内部の
\n
シーケンスは改行文字にマッチする。
GNU 拡張も存在する。
[要修正: より詳細を記述する必要がある。
少なくとも、何がサポートされているかを述べた、
他の文書へのリファレンスが必要である]
その他の注意
このバージョンの sed は、
あらゆる正規表現の内部・置換コマンドの
replacement
の内部・文字交換 (y) コマンドの
source
および
dest
の内部のいずれにおいても、
\
<newline>
というシーケンスが使える。
関連項目
awk
(1),
ed
(1),
expr
(1),
emacs
(1),
perl
(1),
tr
(1),
vi
(1),
regex
(5)[うーん、書かないとダメですねえ]
【訳注: LDP には
regex
(7) があります】,
sed.info,
(sd に関する様々な本のいずれか,
the (sd FAQ (http://www.wollery.demon.co.uk/sedtut10.txt,
http://www.ptug.org/sed/sedfaq.htm).
バグ
バグレポートは
bug-gnu-utils@gnu.org
まで送って下さい。
「Subject:」フィールドのどこかに
「sed」という単語を入れるようにして欲しい。
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする