こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

sedを使用して以下の様な文字列を置換したいと考えています。
iPar(\"w\") → 何かの文字列

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

投稿日時 - 2018-06-18 13:49:03

QNo.9509553

困ってます

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

>なにが悪いのでしょうか?

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

投稿日時 - 2018-06-18 19:12:13

お礼

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

投稿日時 - 2018-06-19 11:06:54

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

◆iPar("w") → hoge
echo "iPar(\"w\")"|sed 's/iPar("w")/hoge/g'

◆iPar(\"w\") → 何かの文字列
echo "iPar(\\\"w\\\")"|sed 's/iPar(\\"w\\")/hoge/g'

上記で動作しました。

投稿日時 - 2018-06-18 15:02:45

あなたにオススメの質問