* sedコマンド [#h14d691f]

** パターン [#s54effd0]
*** 量指定・後方参照 [#xaa5487e]
:量指定|\{N\}
:後方参照|/\(.*\)/\1/

7桁郵便番号1234567をハイフンを差し込んで123-4567に。
 echo "1234567" | sed -e 's/\(.\{3\}\)\(.\{4\}\)/\1-\2/'

** 置換 [#t74cd619]
*** 複数置換する [#a591b17e]
 sed -e 's/H/h/g' -e 's/O/o/g' 1.txt

 hELLo
 WoRLD

eオプションを重ねる。または、
 sed -e 's/H/h/g; s/O/o/g' 1.txt
「;」でつなぐ。

*** 後方参照 [#i62e111e]
対象を「\(\)」でくるみ、「\1」で参照する。
 echo abc | sed 's/a\(.\)c/\1/'

 => b

*** マッチした文字列を挿入する [#tecf4838]
「&」を使う。
 echo abc | sed 's/a/&XYZ/'

 => aXYZbc

 echo abc | sed 's/.*/&XYZ/'

 => abcXYZ

*** 行末に文字列を挿入する [#r8106718]
 sed -e 's/$/ END/' 1.txt

 HELLO END
 WORLD END

*** マッチした行の間にある全ての行に対して置換する [#n887f5f4]
 sed '/TWO/,/FOUR/s/^/#/' 1.txt

 ONE
 #TWO
 #THREE
 #FOUR
 FIVE

「TWO」から「FOUR」までの行に対してs/^/#/を実行する。

*** ファイルの先頭行に文字列を挿入する [#z4130cca]
 sed '1s/^/abc\n/' 1.txt

** 検索・抽出 [#d159ec49]
*** マッチした行だけを表示する [#f3491518]
 sed -n '/abc/p' 1.txt
sedコマンドは-nオプションを付けないとファイルの全内容を表示する。ので、↑の場合、nオプション無しだと二重に表示される。ので、nオプションを付ける。

*** マッチした行を除外する [#a1f0b6df]
 sed '/abc/d' 1.txt

*** 指定した行番号の行を除外する(N,Md) [#w428403a]
 cat 1.txt

 => 01
    02
    03
    04

 sed '2,3d' 1.txt

 => 01
    04

 sed '2,$d' 1.txt

 => 01

*** 最初にマッチした行だけ置換する(0,/REGEXP/s/foo/Bar/) [#ead204d0]
 cat 1.txt
 
 abc
 122
 def
 234

 sed -e '0,/2/s/2/X/' 1.txt
 
 abc
 1X2
 def
 234
「0,/REGEXP/」で行を指定した後に(REGEXPはここでは「2」)、「s/2/X/」で2をXに置換すると、4行目の「234」の「2」は置換されない。

*** シェバングの置換(1行目のみ) [#cbd4e09c]
 cat 1.pl | sed -e '1s#/usr/bin/perl#/usr/local/bin/perl#'

** 参考になるサイト [#m9469f53]
- http://www.grymoire.com/Unix/Sed.html
- http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_05_02.html#sect_05_02_01
- http://users.cybercity.dk/~bse26236/batutil/help/SED.HTM#11.20
- http://www.linuxtopia.org/online_books/linux_tool_guides/the_sed_faq/sedfaq4_004.html

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS