- 締切済み
複数パターンの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/ } ----------------------
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
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 で個別に分けるかです。
お礼
ご回答ありがとうございました。 回答内容を参考にして再びトライしてみたところ、 sedのオプションエラーが出てしまいました・・。 しかし冷静に考えた後、$HOMEが/home/hoge と 展開後に /が含まれていた為に起きていたエラーでしたので、 $を解決後にsedが正常に動作する事を確認しました。 問題が解決した上にコマンドブロックの囲み方が 理解できましたので大変助かりました。 ありがとうございました!