• ベストアンサー

sed での置換

sed で ・I love \underline{"New York"} very much. を ・I love "New York" very much. に変換するには、どう書けばよいでしょうか? s/\\underline{(.*)}/\1/g としてみましたがうまくいきません。。。

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

  • ベストアンサー
  • HOGERA3
  • ベストアンサー率35% (50/139)
回答No.4

>最後に一つだけ質問なのですが >・ダブルクオートはシェルが評価しない >・シングルクオートはシェルが評価しない >のでしょうか? はい。ダブルの場合は環境変数なんかも展開されます。 たとえば、$PATH が /usr/local/bin だとすると、  echo "path = $PATH" とすれば、  path = /usr/local/bin と表示されますが、  echo 'path = $PATH' とすると、  path = $PATH というようにそのまま表示されます。

white-tiger
質問者

お礼

なるほど。 いろいろ勉強になりました!

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • HOGERA3
  • ベストアンサー率35% (50/139)
回答No.3

>sed "s/\\underline{\(.*\)}/\1/g" tmp.txt > >としたのですが・・・ なるほど。 ダブルクオート(")で囲んだから、\\がsedじゃなくて先に シェルに評価されて\になってしまったんでしょう。 つまり  sed 's/\underline{\(.*\)}/\1/g' tmp.txt と同じになってしまったんですね。 ダブルクオートじゃなくてシングルクオートで囲んだら うまくいくと思います。  sed 's/\\underline{\(.*\)}/\1/g' tmp.txt このように。

white-tiger
質問者

お礼

うまくいきました。ありがとうございます! 最後に一つだけ質問なのですが ・ダブルクオートはシェルが評価しない ・シングルクオートはシェルが評価しない のでしょうか? (よくわかっていませんでした)

すると、全ての回答が全文表示されます。
  • HOGERA3
  • ベストアンサー率35% (50/139)
回答No.2

> I love \"New York" very much. > >のように、よけいな \ が残ってしまいます。 >なぜでしょうか? なぜでしょう。 わたしもWin + cygwinでやってみたんですけど。 もしかして s/\\underline{\(.*\)}/\1/g とやったつもりが、実は s/\underline{\(.*\)}/\1/g だった(\が1個抜けてた) ってことはありませんか?

white-tiger
質問者

お礼

はい。いただいたのをコピーしました I love \underline{"New York"} very much. を tmp.txt に保存して、cygwinで sed "s/\\underline{\(.*\)}/\1/g" tmp.txt としたのですが・・・

すると、全ての回答が全文表示されます。
  • HOGERA3
  • ベストアンサー率35% (50/139)
回答No.1

直すところは2つ。 ・括弧は\でエスケープしましょ ・0文字以上の任意の文字列は .* です(ドットが必要) ということで、 s/\\underline{\(.*\)}/\1/g とすればOKです。

white-tiger
質問者

お礼

ありがとうございます。  s/\\underline{\(.*\)}/\1/g でやってみました。  I love \"New York" very much. のように、よけいな \ が残ってしまいます。 なぜでしょうか? (こちらは windows + cygwin 上の sed です)

すると、全ての回答が全文表示されます。

関連するQ&A