• ベストアンサー

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% (4846/10257)
回答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% (4846/10257)
回答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

  • perlで特定行から特定行までを抜き出しor置換

    perlで以下のようなことをしたいと考えています。 以下のことを、コマンドラインから「perl ~」という形で 実行したいのですが、どのよにすればよいでしょうか。 1.特定行から特定行までを抜き出し 2.特定行から特定行の範囲で文字列置換 例えば、次のようなテキストファイルがあったとします。 example.txt ================================== #START aaaa hogehoge test okok perl script #END ================================== 上記ファイルを読み込んで、 1.「#START」から「#END」の間に挟まれた行だけ抜き出し 2.「#START」から「#END」の間で、「test」を置換 のです。 sedで言うところの sed -e '/#START/,/#END/ s/YYYYMM/201603/g' test.txt をやりたいのです。

    • ベストアンサー
    • Perl
  • sedコマンドによる最終行の削除について

    sedコマンドを使用してファイルの最終行を削除する方法を調べていたのですが 最終行の削除は問題なくできたのですが最終行から特定行までを消すため以下のコマンドを発行したのですがうまくいきませんでした。複数サイトを見てみたんですが構文自体は同じでしたのでおそらく問題ないとは思うですが何か気づく方がいたらお教えください。 以下実行コマンド sed -e '$-3,$d' sed_test.txt

  • フィルタで特定のドメインを削除する設定

    トップレベルドメインinfoからくるスパムメールを削除したいのですが、以下の設定を行って検索すると期待通りの表示になりません。 条件: from:(@*.info)もしくは条件: from:(.info) 検索をテストをクリックすると以下の送信元アドレスも表示されます。 info@xxx.com 以下が検索されることを期待します。 xxxx@xxx.info *****@*****.info infoドメインからくるメールを削除するフィルタの正しい設定方法についてご教示ください。

    • ベストアンサー
    • Gmail
  • 外部ファイルを1行ずつ読み込んで特定カラムを引数として

    外部ファイルを1行ずつ読み込んで特定カラムを引数として 外部ファイルを1行ずつ読み込んで特定カラムを引数として 別び外部ファイルに対してgrepをかけたいと考えてます。 DBを作るほどのデータではないので、ファイルの行数を取得してawk/sedコマンド もしくはperlを駆使して実装できればと考えてます。スマートな方法があれば教授ねがいます。 やりたいこと)sample1.logから1/2カラム目を取得して、 sample2.logに対してsample1.logの2カラム目で紐付けて repot.logを出力したい #sample1.log 0001 AAAA 0002 BBBB 0003 AAAA 0004 CCCC  ・  ・ #sample2.log AAAA ABC BBBB DEF CCCC GHI  ・  ・  ・ #report.log 0001 AAAA ABC 0002 BBBB DEF 0003 AAAA ABC 0004 CCCC GHI  ・  ・  ・ 以上

    • ベストアンサー
    • Perl
  • sedで編集対象ファイルのコメント行を無視する

    sedで、いわゆるUNIXにありがちなconfファイルを編集しようとしています。 例えば、以下のようなtest.confファイルがあります。 # cat test.conf #### # test.conf file #### # parameter = xxx   parameter = aaa # set here   #parameter = bbb # set here このファイルの parameter を zzz に変更する場合に、 # sed "s/parameter =.*/parameter = zzz/" < test.conf > test.conf.new と実行すると、コメント行も含めて全て「parameter = zzz」と置き換わります。 そもそもコメントなので動作上問題はないのですが、confファイルのコメント行は sedで無視するようにするには、どのようにしたら良いでしょうか。 ちなみにコメントをあらわす"#"は、行の先頭や、空白、タブの後にあります。 また、正しいパラメータのうしろに説明としてコメントが入る場合もあります。 できればこの空白やタブ、コメントを前処理で削除などせず、見た目は同じまま、 コメントでない行のパラメータだけを入れ替えたいのです。 よろしくお願いします。

  • postfixとmysqlのバーチャルアドレスについて

    現在mysqlにてバーチャルメールアドレスを作成し、メールを受信した場合、実在ユーザーのtestに転送するように設定を行っているのですが、以下のようなエラーが出て受信できません。 例として、 ドメイン:example.com バーチャルアドレス:aaa@example.com とします。 <test@com.com> (expanded from <aaa@example.com>): host mx10.ncsdi.com[XXX.XXX.XXX.XXX] said: 553 5.3.0 <test@com.com>... 5.1.1 Mailbox does not exist (in reply to RCPT TO command) エラーを見てみるとドメインのところが間違っているとは思うのですが、ここの設定ってどこを変更すればいいのでしょうか? 今までこのようなエラーが出た事がなくググッて見たのですが、参考になる情報が見当たりません。 どなたかご教授お願いします。

  • IPアドレスから個人を特定することは可能でしょうか?

    カテゴリーがあっているかわかりませんが、困っています。 インターネットを閲覧中に、誤って有料サイトにアクセスしてしまいました。「戻る」ボタンを押そうとしたところ、下記メッセージが出ました。 ---------------------------------------------------------  個人情報を特定しました。1日以内に料金を振り込んでください。  振り込まれない場合は下記IPアドレスより個人を特定し、  追徴金含め、請求がいきます。   ID:xxxxxxxx   IPアドレス:xxx.xxx.xx.xx  誤って登録された方は下記電話番号に連絡ください   フリーダイヤル:0120-xxx-xxx   緊急時携帯電話:090-xxxx-xxxx   メールアドレス:xxxx@xxx.xxx.jp --------------------------------------------------------- フリーダイヤル(ずっと話中)も緊急時携帯電話(圏外)もつながらず メールアドレスに誤りだからと登録削除を依頼しましたが、返信なし。 IPアドレスは自動取得設定になっており、接続の都度、異なっているようですが、上記のように一瞬でIPアドレスを取得し、個人を特定することが本当にできるのでしょうか?

  • 発信元は特定できてしまいますか?

    outlookexpressを使ってyahooのフリーメールでメールのやりとりをしています。先日相手方から私のメールに下記のようなものがついてくると言われました。 試しに自分自身にメールを送ってみると、そのメールには下記のようなものはついてきません。 私のプロバイダがわかる程度ならいいんですが(でもわからないほうがよい)、私を特定できてしまうんでしょうか? それと、この情報がメールについてくるのは相手の設定でつくものなんですか?それともプロバイダや、使っているメールソフトなんかによってつくんですか? > Received: from smtp01.mail.yahoo.co.jp (smtp01.mail.yahoo.co.jp [x4.x6.xx7.1x]) by xxxx.ne.jp (x.x.x/x.7W01xxxxx9) with SMTP id UAA1xxx6 for <xxxx@xxxx.ne.jp>; Thu, 6 Sep 2001 20:16:57 +0900 (JST) > Received: from p1xxxx1.ppp.dion.ne.jp (HELO oemcomputer) (x1.xx0.xx0.x1) by smtp01.mail.yahoo.co.jp with SMTP; 6 Sep 2001 11:17:32 -0000 > X-Apparently-From: <xxxx@yahoo.co.jp>

  • シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入

    こんにちは。 シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入したいと思います。 ・sample.txt (挿入前) -- <ABC> <ABC> Hello! </ABC> </ABC> -- ↓ ・sample.txt (挿入後) -- <ABC> <ABC> Hello! </ABC> Good Morning Good Evening </ABC> -- 上記のように、テキスト末尾から検索して、 はじめて表れた"</ABC>"のタグの前に、 Good Morning Good Evening という2行の文字列(無理なら1行でも)を追加したいと考えています。 "</ABC>"タグは2つありますが、末尾から検索して初めて表れたもののみ対象です。 このような操作を行うには、 どのようにシェルを組み合わせれば良いのでしょうか? grepやsedを用いて考えてはいますが、よく分かりません。 (grepで末尾から初めて表れた"</ABC>"の行番号を取得し、 その上に、sedで文字列を挿入するなどですが・・・よく分かりません) どなたか、よろしくお願いします。

  • 文字列から、特定の文字を削除したい

    アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか? 例えば電話番号の入力の場合、 03-xxxx-xxxx →03xxxxxxxx 077-xxx-xxxx →077xxxxxxx のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。 入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう