コンテンツにスキップ

Note01

sed

コマンドラインから使えるテキスト処理ツール

バージョン確認

sed --version

コメント

#

-e    expression    処理の内容が 1 つしかない場合は、「-e」を省略することもできる
-i    バックアップを取る
-f    外部コマンド実行

使用例

sed -e '3d' names.txt        #  names.txt の 3行目を削除
sed '3d' names.txt           # ↑と同義(-e を省略できるため)
sed -i.bak '3d' names.txt    # 3行目を削除。bak 拡張子のバックアップを作成
sed -f ex1.sed names.txt     # 外部コマンド実行。『ex1.sed』の内容が「3d」の場合、namex.txt に対し、3d を実行。

sed '3p' names.txt           # 3 行目を print 

構成

「sed '3d' names.txt」

・'3d'の部分:address と command のペアになっている
        address・・・どのような行に対して処理をするか(↑では 「3行目」)
        command・・・何をするか(↑では、「削除」)

パターンスペース

「d」は削除だが、厳密にはパターンスペースの内容を削除。


アドレス部には、正規表現が使用可能。
(例)
「sed '/i$/d' names.txt」


アドレス部は省略可能。その場合、全ての行が対象となる。
(例)
「sed 'd' names.txt」 ⇒ 全削除

ーーーーーーーーーーーーーーーーーーーーーーー

3!d    3 行目以外は全部

ーーーーーーーーーーーーーーーーーーーーーーー
<アドレスとコマンドを複数記述可>
1d;3d


ーーーーーーーーーーーーーーーーーーーーーーー
<範囲指定>
1,3d    1 行目から 3行目


1~2d    1 行目から 2 つ跳ばしで非表示


$       最後の行

コマンド

d    削除(delete)
p    表示(print)
q    quit
i    insert
a    append
y    1文字ずつ置換
s    置換

p

「sed -n '3p' names.txt」とすると、3 行目だけを表示できる。

※p コマンドは、-n とよく使われる。

このオプションがない場合、標準動作のパターンスペースの内容表示も出力される。
(「全内容 + pオプションして指定した内容」が、出力内容となる。)

q

「sed '3q' names.txt」    3行目で処理を終了

i

y

「sed 'y/t/T/' names.txt」    t が全て大文字

「sed 'y/to/TO/' names.txt」   t と o を大文字

「sed 'y/to/OT/' names.txt」   t を O 、o を T

s

「sed 's/apple/Apple/g' items.txt」    apple → Apple

「sed 's/apple/Apple/2' items.txt」    2番目だけが置換される。

「sed 's/apple/Ringo/ig' items.txt」    大文字小文字を問わず、apple → Ringo
      [aA]pple/Ringo/g



<マッチした文字列を置換後の文字列に使用。「&」>
「sed 's/[0-5]/【&】/' items.txt」    0-5 → 【0】〜【5】
=というコマンドを使えば行番号を出力させることも可能です。
# "dotinstall"が出てくる行の行番号を出力
sed -n '/dotinstall/=' names.txt

ホールドスペース

対象ファイル

#main {
    color: red;
    font-weight: bold;
    font-size: 14px;
    background: green;
}

sed

# color change

/color: / {
    h
    s/color: /background: /
    x
}
/background: / {
    g
}

メモ

h    hold        パターンスペースの中身をホールドスペースに退避させることができる。
g    get         ホールドスペースに一時的に退避させた中身を、作業領域であるパターンスペースに戻すことができる。
x    exchange    両者を交換する。


「sed -f ex2.sed style.css」

color の設定内容が background にも反映されているのが分かるかと思います。

「color: red;」から取った値が「background: 」の値になる。