• ベストアンサー

sedでの置換がうまくできません。

sedを使用して以下の様な文字列を置換したいと考えています。 iPar(\"w\") → 何かの文字列 そこで以下のようなsedスクリプトを作成しました。 s/iPar\(\"w\"\)/test/g  → a.sed 使用してみました。具体的には↓のコマンド >sed -f a.sed inputデータ >outputデータ しかし結果ファイルをみても何も変わってくれません。 なにが悪いのでしょうか? どなたかご指南下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>なにが悪いのでしょうか? 通常の文字とメタ文字の区別がついていないからかと思います。 現在よく使われている正規表現は大きく分けて基本正規表現、拡張正規表現、Perl由来の正規表現の3つです。 sedやgrepで扱われている正規表現は基本正規表現です(GNU sedやGNU grepのようにオプション指定で拡張正規表現を扱えるものなどもあります)。 基本正規表現では、'('と')'の文字は通常の文字でエスケープする必要がなく、 '\'でエスケープした際にはグループ指定(拡張正規表現での'(',')')になります。 また'\'自身もメタ文字ですから通常の文字'\'として扱いたい場合にはエスケープする必要があります。 ですので質問でのsedスクリプトは s/iPar(\\"w\\")/test/g になります。

Kasaoka-Taroh
質問者

お礼

丁寧な解説と 回答ありがとうございます。 ご指摘の通りの内容で動作することが確認できました。

その他の回答 (1)

回答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' 上記で動作しました。

関連するQ&A