sedコマンドの応用例(二)

5160 ワード

テキストの下に内容のパラメータを挿入します.
a下に内容を挿入
i上に内容を挿入
c新しい内容のためにキーワードの行を置き換える(少ない)
一般aとi比較常用
[root@localhost ~]# sed '/leon/a\hello you' test
squid:x:23:23::/var/spool/squid:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
leon:x:500:500::/home/leon:/bin/bash
hello you
tom:x:501:501::/home/tom:/bin/bash

aの効果、leonキーの下に挿入
[root@localhost ~]# sed '/leon/i\hello you' test
squid:x:23:23::/var/spool/squid:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
hello you
leon:x:500:500::/home/leon:/bin/bash
tom:x:501:501::/home/tom:/bin/bash

iの効果、leonキーワードの上に挿入
テキストの削除
Sed'1 d'test 1行目を削除し、他の内容を印刷表示
[root@localhost ~]# cat abc
aaaaaaa
bbbbb
ccccc
[root@localhost ~]# sed '1d' abc
bbbbb
ccccc

最初の行が削除されました
[root@localhost ~]# sed '2,4d' test
squid:x:23:23::/var/spool/squid:/sbin/nologin
tom:x:501:501::/home/tom:/bin/bash

2-4行の削除
[root@localhost ~]# cat abc
aaaaaaa
bbbbb
ccccc
[root@localhost ~]# sed '$d' abc
aaaaaaa
bbbbb

最後の行を削除
sed'10,$d'abc 10行を最後の行に削除
[root@localhost ~]# sed '/bbbbb/d' abc
aaaaaaa
ccccc

キーワードbbbbの行を削除
置換コマンド
フォーマット:sed's/ソースキー/置換キー/'ファイル名
ここではキーワードを置換する文字だけで、sed's/abc/bb/'a.txtのように、abcの行の他の内容は影響を受けません.
もし、sed�Cn‘s/ソースキーワード/新キーワード/pファイル名�D�D’は、その行を置き換えた結果のみ印刷されます.
[root@localhost ~]# sed -n 's/leon/win/p' test
win:x:500:500::/home/leon:/bin/bash

sed�Cn's/abc/ccc/pg'testここでのgは全文のabcを表すキーワードがcccに置き換えられ、gを加えなければ各行の最初のabcにのみ一致する
[root@localhost ~]# cat abc
aa aa aa
aa aa cc
bb cc dd
[root@localhost ~]# sed 's/aa/uu/' abc
uu aa aa
uu aa cc
bb cc dd
[root@localhost ~]# sed 's/aa/uu/g' abc
uu uu uu
uu uu cc
bb cc dd

これがgとgを加えていない効果です
1つのファイルに5つのleonがある行のように、n回目の一致を置き換えることを指定します.全文を指してもいいです.3番目のleonをwinに置き換えるだけです.
[root@localhost ~]# cat abc
leon leon leon leon leon
leon leon leon leon
[root@localhost ~]# sed 's/leon/win/3' abc
leon leon win leon leon
leon leon win leon

これでいくつのleonの行の中で、3番目のleonはwinに変更されました
&の使い方
sed's/leon/&aa/'abc&は、前のleonを表す文字で、結果的にleonaaに変更されるというメリットがあります.たとえば、123456789を123456789 abに変更すると、ソースキーが長すぎて、直接&で代用できます.
[root@localhost ~]# cat abc
leon leon leon leon leon
leon leon leon leon
[root@localhost ~]# sed 's/leon/&aa/' abc
leonaa leon leon leon leon
leonaa leon leon leon

最後の/後にgを付けると、全文を表すすべてのleonがleonaaに変更されます.
ここの&=leon
wコマンドは指向性ファイルを入力するが、リダイレクト記号〉があるため、wコマンドはあまり使われない
フォーマット:sed�Cn‘s/leon/win/w test 1’/etc/passwd
rコマンド、ファイルを読み出し、あるファイルの内容を別のファイルのキーワードの次の行に読み出す
[root@localhost ~]# sed '/leon/r  abc'  test
squid:x:23:23::/var/spool/squid:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
leon:x:500:500::/home/leon:/bin/bash
leon leon leon leon leon
leon leon leon leon
tom:x:501:501::/home/tom:/bin/bash

abcファイルのleonキーワードの行をtestファイルに読み込む
次のこともできます.
[root@localhost ~]# ifconfig eth0 | sed '/192.168/r abc'
eth0      Link encap:Ethernet  HWaddr 00:0C:29:A3:7E:26
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
leon leon leon leon leon
leon leon leon leon

qはマッチング終了コマンドであり、指定マッチングが成功するとすぐに終了し、次のキーワードにマッチングしない
[root@localhost ~]# cat abc
leon win aaa
leon leon leon leon
[root@localhost ~]# sed '/leon/q' abc
leon win aaa

最初のキーワードの行に一致するだけで、すぐに次の行に一致しないleonを終了します.
yも置換コマンドで、sとはあまり差がありませんが、対等な長さが必要です.つまり、ソースキーがどれだけ長いか、新しいキーがどれだけ長いかです.
sed'y/aaaaa/1111/'abcソースは新しいキー長と同じでなければなりません.yコマンドはあまり使いません.
{}は-eに相当し、マルチコマンド編集に属する
[root@localhost ~]# sed -n '3,${p;=}' test
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
3
leon:x:500:500::/home/leon:/bin/bash
4
tom:x:501:501::/home/tom:/bin/bash
5
[root@localhost ~]# sed -n -e '3,$p' -e '3,$=' test
sabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologin
3
leon:x:500:500::/home/leon:/bin/bash
4
tom:x:501:501::/home/tom:/bin/bash
5

2つのコマンドは対等効果ですが、{}は使用されていません.コマンドの柔軟性
使用;マルチコマンドを編集すると、-e差が少ないに相当します.
[root@localhost ~]# cat abc
leon win aaa
leon leon leon leon
[root@localhost ~]# sed 's/leon/win/; s/aaa/123/' abc
win win 123
win leon leon leon
[root@localhost ~]# sed -n '1,$p;=' abc
leon win aaa
1
leon leon leon leon
2

見ることができます.書くことより簡潔で柔軟である
別々に印刷して同時に置き換えることもできます
[root@localhost~]# sed -n 's/leon/terry/p; 1,2p' test
squid:x:23:23::/var/spool/squid:/sbin/nologin
xfs:x:43:43:XFont Server:/etc/X11/fs:/sbin/nologin
terry:x:500:500::/home/leon:/bin/bash

1~2行の内容を表示したり、置換結果を印刷したりすることができます
sedの内容はここまでです