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

特定の行を置き換えたいのですが、うまくいきません。
宜しくお願いします。

[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"

A 回答 (6件)

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"

これでご希望の結果になりましたでしょうか。

# ついでに、パイプ '|' で渡しても困らないけど意味もありませんね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/12 19:34

>設定は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」で上書きするようなことはできないです。

すいません。意味がわかりません。
    • good
    • 0

>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

この回答への補足

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

補足日時:2012/02/12 19:47
    • good
    • 0

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



ADM_MAIL を含む行が複数あったら知らん.

この回答への補足

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

補足日時:2012/02/12 19:53
    • good
    • 0

すみません, #1 は日本語がおかしいので訂正します.



どのように特定されるどのファイルの行を, どのように置き換えたいのですか?

この回答への補足

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

例:
ADM_MAIL="root" → ADM_MAIL="test"のようにする。

補足日時:2012/02/09 02:09
    • good
    • 0

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

    • good
    • 0

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