0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[sed] アドレスとコマンド まとめ

Last updated at Posted at 2025-07-03

sed スクリプトの主なアドレスおよびコマンドのまとめです。

参考「sed, a stream editor

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 次の行を入力して後に追加
次の行がない場合は終了
N
GNU 拡張
次の行を入力して後に追加
次の行がない場合も継続

[flags] は省略可能です。
s コマンドの / は他の文字に置き換え可能で、s%regexp%replacement%[flags] のように書くことも出来ます。
※自動出力が有効の場合、p コマンドや P コマンドを使用すると文字列が二重に出力されることがあります (d コマンドや D コマンドでパターンスペースの内容を削除するか、自動出力を無効にすることで二重に出力されなくなります) 。
※自動出力が無効の場合、p コマンドや P コマンドを使用して明示的に出力する必要があります。
D コマンドを使用すると、削除後に内容が残っている場合は次の行を入力せずに今のサイクルを再開始します。
D コマンドを使用すると、内容が残っていない場合は次のサイクルを開始しますが、オプション --debug 指定時の表示では同一サイクルのように扱われます。

フラグ 意味
g 全ての一致を置換
number number 番目の一致のみ置換
p 一致した場合は置換後に出力
I
i
GNU 拡張
大文字小文字を区別しない
M
m
GNU 拡張
複数行モード

2.2. テキスト出力

コマンド 意味
i\\\ntext\n 前に追加
a\\\ntext\n 後に追加
c\\\ntext\n 置換
次のサイクルを開始
i text\n
GNU 拡張
前に追加
a text\n
GNU 拡張
後に追加
c text\n
GNU 拡張
置換
次のサイクルを開始

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 拡張
複数のコマンドのグループ
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?