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

締切り済みの質問

複数パターンのsed文についての質問です。

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/
}
----------------------

投稿日時 - 2007-12-16 16:23:47

QNo.3603216

困ってます

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

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

回答(1)

ANo.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 で個別に分けるかです。

投稿日時 - 2007-12-16 23:42:52

お礼

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

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

投稿日時 - 2007-12-17 23:13:04

あなたにオススメの質問