sedのsコマンド
substitute
flugを指定できる
s/regexp/after/<ここ>の<ここ>の部分
「sコマンド」でググると引っかかるが、man的には「s function」ではとか思った
でも-e <command>とも書いているし、コマンドなのかな、知らん
正規表現部分のデリミタは任意
$ sed -e 's|aaa|bbb|'みたいにパイプで区切ってもいい
$ sed -e sXaaaXbbbXとかでもいい
sの次の文字がデリミタとして認識される
慣習的には「\」「@」「%」が使われることが多い
regexpとafterに出現しない文字で区切ればescapeの手間を省ける
pathを置換したいときは/で区切ってるとespace多発するのでめんどい
s/^/bbb/
行頭にbbbを追加
s/$/bbb/
行末にbbbを追加
この$はescaseさせたほうがいいらしいmrsekut.icon
\$
s/aaa//
文字列aaaを削除
code:例.shell
$ echo XXaaaX | sed -e s/aaa//
XXX
s/^...//
行頭の3文字削除
.は「任意の1文字」を表すので。
s/.*/bbb/
行をbbbに置き換える
code:ex.shell
$ echo aaaXXXbbb | sed -e 's/.*/YYY/'
YYY
s/(.*)/()/
括弧の中の文字列を削除
code:ex.shell
$ echo '(aaa)XXX' | sed -e 's/(.*)/()/'
()XXX
なんでこうなる?
code:ex.shell
$ echo '(aaa)XXX(bbb)' | sed -e 's/(.*)/()/g'
()
()XXX()を期待していたんだけどmrsekut.icon
先頭の(と、行末の)で大きい括弧だと解釈されるのか
\1や\Uなどのコマンド
\1や\2などで\(\)でくくったものを取り出せる
普通に()と書くと正規表現のマッチすべき丸括弧だと認識されるので、escapseする必要がある
\UはUppser caseにする
code:ex.shell
$ echo "abcDEF" | sed -e 's/\(...\)\(.*\)/\U\1\L\2/'
ABCdef