- ベストアンサー
sedでの置換がうまくできません。
sedを使用して以下の様な文字列を置換したいと考えています。 iPar(\"w\") → 何かの文字列 そこで以下のようなsedスクリプトを作成しました。 s/iPar\(\"w\"\)/test/g → a.sed 使用してみました。具体的には↓のコマンド >sed -f a.sed inputデータ >outputデータ しかし結果ファイルをみても何も変わってくれません。 なにが悪いのでしょうか? どなたかご指南下さい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>なにが悪いのでしょうか? 通常の文字とメタ文字の区別がついていないからかと思います。 現在よく使われている正規表現は大きく分けて基本正規表現、拡張正規表現、Perl由来の正規表現の3つです。 sedやgrepで扱われている正規表現は基本正規表現です(GNU sedやGNU grepのようにオプション指定で拡張正規表現を扱えるものなどもあります)。 基本正規表現では、'('と')'の文字は通常の文字でエスケープする必要がなく、 '\'でエスケープした際にはグループ指定(拡張正規表現での'(',')')になります。 また'\'自身もメタ文字ですから通常の文字'\'として扱いたい場合にはエスケープする必要があります。 ですので質問でのsedスクリプトは s/iPar(\\"w\\")/test/g になります。
その他の回答 (1)
- muuming2001
- ベストアンサー率23% (202/847)
回答No.1
◆iPar("w") → hoge echo "iPar(\"w\")"|sed 's/iPar("w")/hoge/g' ◆iPar(\"w\") → 何かの文字列 echo "iPar(\\\"w\\\")"|sed 's/iPar(\\"w\\")/hoge/g' 上記で動作しました。
お礼
丁寧な解説と 回答ありがとうございます。 ご指摘の通りの内容で動作することが確認できました。