• ベストアンサー

B-SHELL 特定の行を置き換えたい

特定の行を置き換えたいのですが、うまくいきません。 宜しくお願いします。 [root@xxxx]# test=(`grep -w "ADM_MAIL" xxx.cfg`) | sed -e "s/'${test}'/ADM_MAIL=111/g" xxx.cfg ADM_MAIL="root" MY_DOMAIN="example.com"

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

  • ベストアンサー
  • e_watt
  • ベストアンサー率71% (25/35)
回答No.3

sed に渡している ${test} をシングルクォートでくくってしまったから 置き換えが起こらないのですね。 ダブルクォートにするか、括るのをやめてしまえばよいでしょう。 test=(`grep -w "ADM_MAIL" xxx.cfg`) ; sed -e "s/${test}/ADM_MAIL=111/g" xxx.cfg ADM_MAIL=111 MY_DOMAIN="example.com" これでご希望の結果になりましたでしょうか。 # ついでに、パイプ '|' で渡しても困らないけど意味もありませんね。

s0217071
質問者

お礼

ご教授いただいたもので、思ったような結果が得られました。 ありがとうございます。

その他の回答 (5)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.6

>設定はrootだけとは限らないので、grepで現在の設定情報を取り出しています。 じゃあ、ADM_MAILが含まれる行をまるごと置き換えると言うことで良いですか? sed '/ADM_MAIL/s/.*/ADM_MAIL=111/' xxx.cfg > xxx.tmp && mv xxx.tmp xxx.cfg >ほかの情報も含まれている為、 「> xxx.tmp && mv xxx.tmp xxx.cfg」で上書きするようなことはできないです。 すいません。意味がわかりません。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.5

>ADM_MAIL="root" → ADM_MAIL="test"のようにする。 ADM_MAILが含まれる行のrootという文字列をtestという文字列に置き換えたい と言うことであれば、 sed '/ADM_MAIL/s/root/test/' xxx.cfg > xxx.tmp && mv xxx.tmp xxx.cfg testという文字列でなくtestというシェル変数に入っている文字列で置き換えたいなら、 sed "/ADM_MAIL/s/root/$test/" xxx.cfg > xxx.tmp && mv xxx.tmp xxx.cfg

s0217071
質問者

補足

設定はrootだけとは限らないので、grepで現在の設定情報を取り出しています。 ほかの情報も含まれている為、 「> xxx.tmp && mv xxx.tmp xxx.cfg」で上書きするようなことはできないです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

なんか補足の日本語も怪しいけど (「その変数」ってなんだ), grep せずとも s にアドレスをつければほとんど終わりでは? ADM_MAIL を含む行が複数あったら知らん.

s0217071
質問者

補足

確かに複数行あったら場合は、トラブルの元です。 エラー表示で、対応します。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

すみません, #1 は日本語がおかしいので訂正します. どのように特定されるどのファイルの行を, どのように置き換えたいのですか?

s0217071
質問者

補足

xxx,cfgというファイルのADM_MAILという文字列があるのですが、 その変数に仮にrootを割り当てています。 この割り当てているものは、任意の文字列で変更されます。 行を変更せずに、修正したいのです。 (いったん削除して、最終行に追加する方法は使用しない) 宜しくお願いします。 例: ADM_MAIL="root" → ADM_MAIL="test"のようにする。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

どのようにして特定されるどのファイルの行そのように置き換えたい?

関連するQ&A