sedコマンド

LASTUPDATE:2023/12/19
正規表現(文字列と扱う場合はエスケープが必要)

. * + ? \ | $ ^ [ ] ( ) { }
正規表現ではないがエスケープが必要なもの " ' ` & ;
逆にエスケープ不要なもの : < > @

 

sed 's/ab/cd/' sは置換を意味する。正規表現に一致した最初のもののみが置換される。
最初に登場したab→cdに置き換える。
sed 'y/ab/cd/' yをつけるとsとは違う置換方法。a→c、b→dに置き換える。
sed 's/ab/cd/g' gをつけると一致したすべてのものを置換する。
sed '/正規表現/d' dをつけると正規表現に一致した行を削除する。
sed 's/ab/cd/i' iをつけると大文字と小文字を区別しない。

 

-r (-E) 拡張正規表現を使用する。
-e 複数の置換コマンドを利用する場合に使用する。
-n 出力コマンド以外の出力を行わない。
-f 文字列パターンを含むファイルを指定する。


使用例
echo abcdef|sed -e 's/abc/ABC/' -e 's/def/DEF/'
結果⇒ ABCDEF
--------------------------------------------------------------------------------
test.txt

aaa
bbb
ccc

cat test.txt|sed 's/aaa/AAA/'
結果

AAA
bbb
ccc

cat test.txt|sed -n 's/aaa/AAA/'
結果

 

cat test.txt|sed -n 's/aaa/AAA/p'
結果

AAA

cat test.txt|sed 's/aaa/AAA/p'
結果

AAA
bbb
ccc

sed -n '/正規表現/p'と書くと正規表現にマッチした行だけを出力してくれる。
cat file.txt|sed -n '/\.exe$/p'
--------------------------------------------------------------------------------
&は検索文字列を意味する。
echo 昨日は雨です|sed 's/雨/&&/'
結果

昨日は雨雨です

--------------------------------------------------------------------------------
()で囲んだものには番号が付き\1などで呼び出せる。これを利用するには-Eオプションが必要
echo 私は中学生です|sed -E 's/(私は)(中学生です)/\2\1/' 結果

中学生です私は

echo 私は高校生です|sed -E 's/(私)は(高校生)です/\2\1/' 結果

高校生私

--------------------------------------------------------------------------------
空行の削除
test.txt


aaa

bbb
ccc

cat test.txt|sed '/^$/d'
結果

aaa
bbb
ccc

--------------------------------------------------------------------------------

基本正規表現 拡張正規表現
* *
\+ +
\? ?
\{n,m\} {n,m}
\{n,\} {n,}
\{n\} {n}
\(regexp)\) (regexp)
\| |