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させたほうがいいらしい

\$
s/aaa//
文字列 aaa
を削除
例.shell$ echo XXaaaX | sed -e s/aaa//
XXX
s/^...//
行頭の3文字削除
.
は「任意の1文字」を表すので。
s/.*/bbb/
行を bbb
に置き換える
ex.shell$ echo aaaXXXbbb | sed -e 's/.*/YYY/'
YYY
s/(.*)/()/
括弧の中の文字列を削除
ex.shell$ echo '(aaa)XXX' | sed -e 's/(.*)/()/'
()XXX
なんでこうなる?
ex.shell$ echo '(aaa)XXX(bbb)' | sed -e 's/(.*)/()/g'
()
()XXX()
を期待していたんだけど

先頭の (
と、行末の )
で大きい括弧だと解釈されるのか
\1
や \U
などのコマンド
\1
や \2
などで \(\)
でくくったものを取り出せる
普通に ()
と書くと正規表現のマッチすべき丸括弧だと認識されるので、escapseする必要がある
\U
はUppser caseにする
ex.shell$ echo "abcDEF" | sed -e 's/\(...\)\(.*\)/\U\1\L\2/'
ABCdef