* 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