sed オプション一覧

2024年12月17日

一覧

以下に、sedコマンドの主なオプション一覧とその使い方を具体的な例題とともに説明します。


sed の主なオプション一覧

オプション説明
-n通常の出力を抑制し、指定したパターンや行だけを出力する
-eスクリプトを指定して実行する
-i元のファイルを直接編集する(バックアップオプション付き)
-fスクリプトファイルを指定して実行する
-r拡張正規表現を使用する
$ファイルの最終行を対象にする
q指定された行で処理を終了する
d指定された行を削除する
a指定行の後にテキストを挿入する
i指定行の前にテキストを挿入する
p指定したパターンに一致する行を表示する
sパターンに一致する部分を置換する

具体例

例1: エラーログを抽出

sed -n '/error/p' log.txt
  • log.txt 内の「error」を含む行だけを出力します。

例2: 複数のファイルから特定の行範囲を抽出

sed -n '10,15p' file1.txt file2.txt
  • file1.txtfile2.txt から10行目から15行目を表示します。

例3: 特定行の後にテキストを追加

sed '3a This is a new line after line 3.' file.txt
  • file.txt の3行目の後に「This is a new line after line 3.」を追加します。

例4: 特定行の前にテキストを追加

sed '5i Inserted before line 5.' file.txt
  • file.txt の5行目の前に「Inserted before line 5.」を挿入します。

例5: 処理を特定行で終了

sed '7q' file.txt
  • file.txt の1行目から7行目までを処理して終了します。

例6: 特定の行を削除

sed '8d' file.txt
  • file.txt の8行目を削除します。

例7: 末尾行を削除

sed '$d' file.txt
  • file.txt の最終行を削除します。

例8: 正規表現を用いて文字列を置換

sed -r 's/[0-9]+/###/g' data.txt
  • data.txt 内の数字をすべて「###」に置き換えます。

例9: ファイルを直接編集

sed -i 's/foo/bar/g' config.txt
  • config.txt の中で「foo」を「bar」に置き換え、元のファイルを直接変更します。

例10: スクリプトファイルで処理

echo "s/old/new/g" > script.sed
sed -f script.sed file.txt
  • script.sed ファイルを使って file.txt の中の「old」を「new」に置き換えます。

行指定


1. 行範囲外での文字列置換

コマンド例

sed -e '3,6!s/old/new/g' example.txt

説明

  • 3,6!: 3行目から6行目を「範囲外」と指定します(!が範囲外を意味)。
  • s/old/new/g: oldnewに置換します。gは全体置換(global)を指定します。

使用例

入力ファイル (example.txt):

line1
line2
line3
line4
line5
line6
line7

実行:

sed -e '3,6!s/line/row/g' example.txt

結果:

row1
row2
line3
line4
line5
line6
row7

解説: 3行目から6行目以外の行(1, 2, 7行目)でlinerowに置換します。


2. 特定の文字列範囲内での文字列置換

コマンド例

sed -e '/start/,/finish/ s/old/new/g' example.txt

説明

  • /start/,/finish/: startという文字列を含む行から、finishという文字列を含む行までの範囲を指定。
  • s/old/new/g: 範囲内でoldnewに置換。

使用例

入力ファイル (example.txt):

header
start
line1
line2
finish
footer

実行:

sed -e '/start/,/finish/ s/line/row/g' example.txt

結果:

header
start
row1
row2
finish
footer

解説: startfinishの間の行(2〜5行目)でlinerowに置換します。


3. 特定の文字列範囲外での文字列置換

コマンド例

sed -e '/start/,/finish/ !s/old/new/g' example.txt

説明

  • /start/,/finish/ !: startからfinishの間を「範囲外」と指定。
  • s/old/new/g: 範囲外でoldnewに置換。

使用例

入力ファイル (example.txt):

header
start
line1
line2
finish
footer

実行:

sed -e '/start/,/finish/ !s/line/row/g' example.txt

結果:

header
start
line1
line2
finish
footer

解説: 範囲外(headerfooter)でlinerowに置換します。


4. 特定パターン行での文字列置換

コマンド例

sed -E '/^#/s/old/new/g' example.txt

説明

  • /^#/: 行の先頭が#で始まる行を指定。
  • s/old/new/g: 該当行でoldnewに置換。

使用例

入力ファイル (example.txt):

#comment1
line1
#comment2
line2

実行:

sed -E '/^#/s/comment/note/g' example.txt

結果:

#note1
line1
#note2
line2

解説: 行の先頭が#で始まる行でcommentnoteに置換します。


5. 特定パターン行以外での文字列置換

コマンド例

sed -E '/^#/!s/old/new/g' example.txt

説明

  • /^#/!: 行の先頭が#で始まらない行を指定。
  • s/old/new/g: 該当行でoldnewに置換。

使用例

入力ファイル (example.txt):

#comment1
line1
#comment2
line2

実行:

sed -E '/^#/!s/line/row/g' example.txt

結果:

#comment1
row1
#comment2
row2

解説: 行の先頭が#で始まらない行でlinerowに置換します。


6. 特定範囲内の文字列置換

コマンド例

sed -e '2,5s/old/new/g' example.txt

説明

  • 2,5: 2行目から5行目の間を範囲として指定。
  • s/old/new/g: 範囲内でoldnewに置換。

使用例

入力ファイル (example.txt):

line1
line2
line3
line4
line5
line6

実行:

sed -e '2,4s/line/row/g' example.txt

結果:

line1
row2
row3
row4
line5
line6

解説: 2行目から4行目の間でlinerowに置換します。


busybox

BusyBox for Windows

   busybox --install C:\path\to\directory

ダブルコーテーションを使ってください


"C:\app\busybox\sed.exe"  -e "$d" file.txt

bat,windows

Posted by eightban