重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

sedの使い方がよく分からない為、教えてください。
テキストの中で、同じパターンスペースに対して、
別の文字を置換させたいと考えています。
(一つ目のマッチングには、yyy 二つ目には、zzzなど)
sed文ではコマンドブロックの書き方がわからないので、
sedスクリプトを別に用意してファイルを読み込ませた所、
うまくいきました。
sed -f test.sed test.txt

しかし、第二段階として、置換文字列を変数にしたところ、
変数展開ができませんでした。実際には変数展開を考えているので、
困っているところです。
この問題を解決できるようなsed文(sed -e)か、sedスクリプトを
教えて頂きたく宜しくお願いいたします。

下記、テスト材料です。
一つ目のabcを $HOMEに、
二つ目のabcを $SHELLに置き換えたいです。

text.txt (編集元テキスト)
------------------
User
yyyyy
abc
Pass
zzzzz
abc
-------------------

test.sed(SEDスクリプト)
---------------------
/User/{
N
N
s/abc/$HOME/
N
N
N
s/abc/$SHELL/
}
----------------------

A 回答 (1件)

sed "/User/{;N;N;s/abc/$HOME/;N;N;N;s/abc/$SHELL;}" text.txt



sed の種類によっては、下記のように書かないといけないかもしれません。

sed -e "/User/{" -e N -e N -e "s/abc/$HOME/" -e N -e N -e N -e "s/abc/$SHELL/" -e "}" text.txt

要は、スクリプトファイルの改行のところを ; にするか、-e で個別に分けるかです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
回答内容を参考にして再びトライしてみたところ、
sedのオプションエラーが出てしまいました・・。
しかし冷静に考えた後、$HOMEが/home/hoge と 
展開後に /が含まれていた為に起きていたエラーでしたので、
$を解決後にsedが正常に動作する事を確認しました。

問題が解決した上にコマンドブロックの囲み方が
理解できましたので大変助かりました。
ありがとうございました!

お礼日時:2007/12/17 23:13

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