• ベストアンサー

DOS版sedでの行末処理について

DOS版sedで行末文字を置換したいのですが、うまくいきません。 テキストの行末にある半角「L」を全角「」」に差し替えたく、以下のようにやってみましたが、置換が行われません。 sed -e "s/L\$/」/" 入力ファイル名 >出力ファイル名 sedはVectorからダウンロードした 「sed 1.18+mb1.03 フリーソフト マルチバイト文字対応版 GNU sed (96.06.10公開 59K) 」 を使用。 テキストはWindowsで生成したものです。 OSはWindowsXP SP3。 御教授よろしくお願いします。

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

  • ベストアンサー
回答No.2

$ をエスケープする必要があるのは、行末ではなく、 $ そのものを表現したい時です。 したがって、この場合はエスケープしなくても良く、単に、 sed -e "s/L$/」/" IN_PATH > OUT_PATH と書けると思います。

DESTROY11
質問者

お礼

にゃるほど。DOSではエスケープ制御を考えなくてよかったのですね。 ありがとうございます。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

UNIXでのコマンドラインを参考にしたのではないですか? UNIXのコマンドラインシェルでは ・" " で括られた文字列は、中に書かれた特殊文字を解釈して、文字列の展開をする ・ $ は変数展開に使用する特殊文字(Windowsでの % に相当) という動作をします。 そのため、""の中で正規表現のメタ文字として、「文字$」を使おうとすると、シェルで変数展開されないように \ でエスケープする必要があります。 (または、変数展開をしない ' ' で括る) Windowsのコマンドプロンプトでは、 $ も \ も特に展開は行われないので、\$ はそのまま\と$となります。 これが「末尾」の意味で無くなるのは既にある通りです。 文字列の展開がややこしいなら、sedのコマンドを別のファイルにする方法があります。 sed -f コマンドを書いたファイル

DESTROY11
質問者

お礼

にゃるほど。DOSではエスケープ制御を考えなくてよかったのですね。 ありがとうございます。

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

>sed -e "s/L\$/」/" 入力ファイル名 >出力ファイル名 行末の"L"ではなく行の1番目に現れる"L$"を置換するようになってる気がしますけど。