プロが教えるわが家の防犯対策術!

DOS版sedで行末文字を置換したいのですが、うまくいきません。

テキストの行末にある半角「L」を全角「」」に差し替えたく、以下のようにやってみましたが、置換が行われません。
sed -e "s/L\$/」/" 入力ファイル名 >出力ファイル名

sedはVectorからダウンロードした
「sed 1.18+mb1.03 フリーソフト マルチバイト文字対応版 GNU sed (96.06.10公開 59K) 」
を使用。
テキストはWindowsで生成したものです。
OSはWindowsXP SP3。

御教授よろしくお願いします。

A 回答 (3件)

$ をエスケープする必要があるのは、行末ではなく、


$ そのものを表現したい時です。
したがって、この場合はエスケープしなくても良く、単に、
sed -e "s/L$/」/" IN_PATH > OUT_PATH
と書けると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/01/14 20:26

UNIXでのコマンドラインを参考にしたのではないですか?



UNIXのコマンドラインシェルでは
・" " で括られた文字列は、中に書かれた特殊文字を解釈して、文字列の展開をする
・ $ は変数展開に使用する特殊文字(Windowsでの % に相当)
という動作をします。
そのため、""の中で正規表現のメタ文字として、「文字$」を使おうとすると、シェルで変数展開されないように \ でエスケープする必要があります。
(または、変数展開をしない ' ' で括る)

Windowsのコマンドプロンプトでは、 $ も \ も特に展開は行われないので、\$ はそのまま\と$となります。
これが「末尾」の意味で無くなるのは既にある通りです。


文字列の展開がややこしいなら、sedのコマンドを別のファイルにする方法があります。
sed -f コマンドを書いたファイル
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/01/14 20:26

>sed -e "s/L\$/」/" 入力ファイル名 >出力ファイル名



行末の"L"ではなく行の1番目に現れる"L$"を置換するようになってる気がしますけど。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!