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) |
\| | | |