- 【機能説明】
- sed (stream editor) は
テキストファイルの編集をコマンドから一括して行うツールです。
- 【入力フォーマット】
- sed [ オプション ] ファイル...
- 【主なオプション】
- -ecommand
- 編集コマンド(追加、削除、置換など)を指定します、このコマンドは複数回指定可能です。
- s/str1/str2/[gp]
- 文字列str1 を str2 に置換する。
- g オプションは同一行で該当する変更が複数回登場する時に、それらを全て置換
- p オプションは変更された結果を表示。
- また \(str1\) とする事で合致した部分を \1 として str2 で参照することができます。
- /str1/d
- 文字列 str1 に合致した行を削除します。
- -f script
- sed コマンドを記述したスクリプトファイルの指定
- -n
- 特に指定しない限り変更を入力データを表示しない。
- 【実行例1】文字列の置換
# 不等号を > < に変換
$ cat sample.txt
AUTHOR
Written by Richard Stallman and David MacKenzie.
REPORTING BUGS
Report bugs to <bug-coreutils@gnu.org>
COPYRIGHT
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There
is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICU-
LAR PURPOSE.
$ sed -e 's/>/>/g' -e 's/</</g' sample.txt
AUTHOR
Written by Richard Stallman and David MacKenzie.
REPORTING BUGS
Report bugs to <bug-coreutils@gnu.org>.
COPYRIGHT
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There
is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICU-
LAR PURPOSE.
- 【実行例2】特定行の切り出し
# 行を特定して取り出す
$ cat -n /etc/passwd |sed -e "1,5p" -n
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
$ cat -n /etc/passwd |sed -e "20,25p" -n
20 rpm:x:37:37::/var/lib/rpm:/sbin/nologin
21 haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
22 netdump:x:34:34:Network Crash Dump user:/var/crash:/bin/bash
23 ident:x:98:98::/home/ident:/sbin/nologin
24 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
25 rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
# 行に含まれる文字列を指定し、そこから3行切り出す
$ cat /etc/passwd |sed -e "/^lp/,+3p" -n
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
- 【実行例3】文字列の切り出し
# 括弧 \(, \) 内の正規表現で合致した文字列を \1 として切り出す
$ ls
a.sed find.txt sample.txt
$ ls | sed -e "s/\(^.*$\)/mv \1 \1.bkup"
mv a.sed a.sed.bkup
mv find.txt find.txt.bkup
mv sample.txt sample.txt.bkup
- 【実行例4】複雑な文字列変換
$ /sbin/ipconfig
eth0 Link encap:Ethernet HWaddr 00:B0:D0:AD:49:9C
inet addr:172.19.0.117 Bcast:172.19.255.255 Mask:255.255.0.0
inet6 addr: fe80::2b0:d0ff:fead:499c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:27694 errors:0 dropped:0 overruns:0 frame:0
TX packets:13791 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14613860 (13.9 MiB) TX bytes:2454658 (2.3 MiB)
Interrupt:11 Base address:0xec80
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:589 errors:0 dropped:0 overruns:0 frame:0
TX packets:589 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:121651 (118.7 KiB) TX bytes:121651 (118.7 KiB)
# ipconfig の出力のうち Bcast のある行のみを切り出し
# その行の行頭から Bcast: までを削除
# 更に Mask から行末までを削除
$ /sbin/ipconfig | sed -e '/Bcast/{s/^.*Bcast://;s/Mask.*$//p}' -n`
172.19.255.255