sed スクリプトの主なアドレスおよびコマンドのまとめです。
1. アドレス
| アドレス | 意味 |
|---|---|
number |
行番号1 以上 |
$ |
最終行 |
/regexp/\%regexp%
|
正規表現 |
/regexp/[flags]\%regexp%[flags]GNU 拡張 |
正規表現 |
addr1,addr2 |
範囲 |
addr ! |
addr 以外 |
※ [flags] は省略可能です。
※ \%regexp% および \%regexp%[flags] の % は他の文字に置き換え可能で、\;regexp; および \;regexp;[flags] のように書くことも出来ます。
| フラグ | 意味 |
|---|---|
I |
大文字小文字を区別しない |
M |
複数行モード |
参考「4 Addresses: selecting lines - sed, a stream editor」
2. コマンド
参考「3.2 sed commands summary - sed, a stream editor」
2.1. パターンスペース
| コマンド | 意味 |
|---|---|
s/regexp/replacement/[flags] |
正規表現置換 |
d |
削除 次のサイクルを開始 |
D |
最初の行のみ削除 内容が残っている場合は今のサイクルを再開始 内容が残っていない場合は次のサイクルを開始 |
p |
出力 |
P |
最初の行のみ出力 |
l |
明確な形式で出力 (デバッグ時等で使用) |
n |
自動出力が有効の場合は自動出力 次の行を入力して置換 |
N |
次の行を入力して後に追加 次の行がない場合は終了 |
NGNU 拡張 |
次の行を入力して後に追加 次の行がない場合も継続 |
※ [flags] は省略可能です。
※ s コマンドの / は他の文字に置き換え可能で、s%regexp%replacement%[flags] のように書くことも出来ます。
※自動出力が有効の場合、p コマンドや P コマンドを使用すると文字列が二重に出力されることがあります (d コマンドや D コマンドでパターンスペースの内容を削除するか、自動出力を無効にすることで二重に出力されなくなります) 。
※自動出力が無効の場合、p コマンドや P コマンドを使用して明示的に出力する必要があります。
※ D コマンドを使用すると、削除後に内容が残っている場合は次の行を入力せずに今のサイクルを再開始します。
※ D コマンドを使用すると、内容が残っていない場合は次のサイクルを開始しますが、オプション --debug 指定時の表示では同一サイクルのように扱われます。
| フラグ | 意味 |
|---|---|
g |
全ての一致を置換 |
number |
number 番目の一致のみ置換 |
p |
一致した場合は置換後に出力 |
IiGNU 拡張 |
大文字小文字を区別しない |
MmGNU 拡張 |
複数行モード |
2.2. テキスト出力
| コマンド | 意味 |
|---|---|
i\\\ntext\n |
前に追加 |
a\\\ntext\n |
後に追加 |
c\\\ntext\n |
置換 次のサイクルを開始 |
i text\nGNU 拡張 |
前に追加 |
a text\nGNU 拡張 |
後に追加 |
c text\nGNU 拡張 |
置換 次のサイクルを開始 |
※ text 中で改行する場合はバックスラッシュ \ を使用します。
※テキスト出力のコマンドは末尾改行が必須で、セミコロン ; による代替はできません (以下のような書き方は可: sed $'a\\\nfoo', sed $'a\\\nfoo\na\\\nbar', sed -e $'a\\\nfoo' -e $'a\\\nbar', sed 'a foo', sed $'a foo\na bar', sed -e 'a foo' -e 'a bar') 。
※テキスト出力のコマンドは text をパターンスペースに転送せず、直接出力します。
2.3. 終了
| コマンド | 意味 |
|---|---|
q |
自動出力が有効の場合は自動出力 終了 |
q [exit-code]GNU 拡張 |
自動出力が有効の場合は自動出力 終了 exit-code を終了コードとして返す |
Q [exit-code]GNU 拡張 |
終了exit-code を終了コードとして返す |
※ [exit-code] は省略可能です。
※終了のコマンドは次のサイクルを開始しません。
2.4. 分岐
| コマンド | 意味 |
|---|---|
:label |
ラベル |
t [label] |
直近の文字列置換が成功していたら分岐 |
T [label]GNU 拡張 |
直近の文字列置換が失敗していたら分岐 |
b [label] |
無条件分岐 |
※ [label] が省略された場合は次のサイクルを開始します。
2.5. ホールドスペース
| コマンド | 意味 |
|---|---|
h |
パターンスペースからホールドスペースへ内容を転送して置換 |
H |
パターンスペースからホールドスペースへ内容を転送して後に追加 |
g |
ホールドスペースからパターンスペースへ内容を転送して置換 |
G |
ホールドスペースからパターンスペースへ内容を転送して後に追加 |
x |
パターンスペースとホールドスペースの内容を交換 |
2.6. グループ
| コマンド | 意味 |
|---|---|
{ commands } |
複数のコマンドのグループ |
{ cmd; cmd ... }GNU 拡張 |
複数のコマンドのグループ |