UNIXでファイルの中身を更新する方法

このQ&Aのポイント
  • UNIXを使用している場合、ファイル内の特定の行を更新する方法について教えてください。
  • 具体的には、AAA.confというファイル内の行「TEST=-200」を「TEST=-250」に変更したいです。
  • 更新する際に、ピンポイントで行を上書きする方法と、前後の内容を別ファイルに分けて更新する方法の2つを教えてください。
回答を見る
  • ベストアンサー

UNIXでファイルの中身を更新

いつもお世話になっております。UNIXを使用しております。 とあるAAA.confという名のファイル内の任意の行「TEST=-200」を 「TEST=-250」というように更新したいのですが、下記(1)、(2)の 方法でできますでしょうか。どのようなコマンドを使用するとよい ですか。 (1)更新したい行をピンポイントで上書き更新。 (2)更新したい行の直前までの内容を別ファイルAAA_TOP.confとし、 直後の内容を別ファイルAAA_BOT.confとして作成しておき、更新 処理を行う際に、 (2)-1:AAA_TOP.confを読み込み、新規のAAA.confに書き込む。 (2)-2:「TEST=-250」と書き込む (2)-3:AAA_BOT.confを読み込み、新規のAAA.confに追記する。

  • TEVEZ
  • お礼率58% (10/17)

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

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

(1)sed sed -e "s/TEST=-200/TEST=-250/g" AAA.conf > AAA_new.conf (2)cat cat AAA_TOP.conf > AAA.conf ; echo "TEST=-250" >> AAA.conf ; cat AAA_BOT.conf >> AAA.conf こんな感じでしょうか?

その他の回答 (2)

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

(1) は「任意の行」の意味によるな. 「全ての行」なのか「特定の行」なのかで変わってくる. (2) だと echo "TEST=-250" | cat AAA_TOP.conf - AAA_BOT.conf > AAA.conf って方法もあります.

  • f272
  • ベストアンサー率46% (7996/17095)
回答No.1

(1) $ sed '1,$s/TEST=-200/TEST=-250/g' AAA.conf > AAAA.conf; mv AAAA.conf AAA.conf (2) $ cat AAA_TOP.conf > AAA.conf; echo TEST=-250 >> AAA.conf; cat AAA_BOT.conf >> AAA.conf

TEVEZ
質問者

お礼

みなさま、ご丁寧に回答頂きありがとうございました。 おかげさまでできました! お返事遅くなり大変申し訳ありませんでした。

関連するQ&A

  • 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で無視するようにするには、どのようにしたら良いでしょうか。 ちなみにコメントをあらわす"#"は、行の先頭や、空白、タブの後にあります。 また、正しいパラメータのうしろに説明としてコメントが入る場合もあります。 できればこの空白やタブ、コメントを前処理で削除などせず、見た目は同じまま、 コメントでない行のパラメータだけを入れ替えたいのです。 よろしくお願いします。

  • UNIX シェルスクリプト

    UNIXのシェルスクリプトを使用してテキストファイルのある列にある 特定の文字列を条件としてその行を出力するということをやりたいのですが どのようにすればできるでしょうか? 例えば,以下のようなテキストファイルがあって,2列目がYAHOOの行を 主力したいというようなことです。 AAA SOFTBANK BBB YAHOO YAHOO TEST CCC QUICK DDD YAHOO ↓ BBB YAHOO DDD YAHOO

  • 親ディレクトリの更新日付を更新せずにファイルを削除するには

    親ディレクトリの更新日付を更新せずにファイルを削除するには 例えば、以下のディレクトリ構成で「aaa.txt」を削除しても親ディレクトリである「AAA」の更新日付が変更されない方法はありますでしょうか? なお、実装はRHEL5上でのBashスクリプトになります。 /home/hoge/AAA/ => 2010/10/01 06:30:00 /home/hoge/AAA/aaa.txt => 2010/10/01 06:30:00 2010/10/03 12:30:00に以下のコマンドを発行 rm /home/hoge/AAA/aaa.txt /home/hoge/AAA/ => 2010/10/03 12:30:00 に更新されてしまいます。 => 2010/10/01 06:30:00 を保持していたいのです。 できればコマンドのみで解決したいと思っています。 コマンド単体で無理なら、rmで削除する前にディレクトリ情報を一時ファイルへ書き出すしかないと思っています。 以上、よろしくお願いします。

  • UNIX コマンドで 複数ファイルの文字列置換の方法

    UNIX初心者です。 UNIXのコマンドで複数のファイルの中身を同時に置換できないでしょうか? 自分で探しては見たのですが、"sed"しか見つかりません。 sed 's/aaa/AAA/g' <file1> file2 という方法では、ひとつずつなので、時間がかかってしまいます。 UNIXコマンドには、ありませんでしょうか。 また、無ければどのような知識が必要でしょうか。 私の知識が少ない為、内容が判りにくいとは思います。 すみませんが、よろしくお願いします。

  • unixのシェルでファイル内容を読み込む

    ど初心者です。わかりづらいかもしれませんが宜しくお願いします。 以下のような処理を行いたいと考えています。 (1) aaa.sh(シェルスクリプト)にてバッチプログラムを起動 (2)バッチでエラーの場合、結果ファイル(bbb.txt)に「1」を出力する。 (3)aaa.sh(シェルスクリプト)にて結果ファイルの内容を読み取り「1」の場合は、再度バッチプログラムを起動する。 このうち(3)の処理にて、結果ファイルの読み込み方法がわかりません。 調べた結果、以下のような処理で可能なようですが・・ while read LINE; do echo $line done < aaa.txt 読み込むのは1行なので、ループ処理にはしたくないのですが、例えば「read LINE aaa.txt」のような簡単なコマンドで、ファイルの中身を読み込むことはできないのでしょうか? 実はUNIXが初めてで、しかもスケジュールに余裕がないため焦っております。 なにぶん知識不足な故、ちんぷんかんぷんな質問かも知れませんが、よろしくお願いいたします。

  • エクセルにおいて、行ごとに別ファイルを作成

    エクセル AAA.xls の、シート aaa のデータが851行まであります。 (1行目は名前や列名などのデータです) このデータを複数のエクセルファイルに、 2~171行目までは 01.xls 172~341行目までは 02.xls 342~511行目までは 03.xls 512~681行目までは 04.xls 682~851行目までは 05.xls のように分けて保存したいです。 さらに、週毎に シートaaa のデータは更新されるため、 B~F.xls への保存も、前月分を残したまま追記していく必要があります。 (たとえば、01.xls を開くと、12月1週目のデータの後に、12月2週目のデータが 追記される・・・ という操作を組み込みたいです) こういった作業をするためのマクロは、実際にどのように書けばよいのか、 ご教示ください。 非常に複雑なマクロになってしまうかもしれませんが、 どうぞよろしくお願いいたします。

  • ファイルの結合

    UNIX上で下記のようなfileA、fileBから fileA aaa,aaa,222 aaa,bbb,111 aaa,ccc,333 fileB aaa,aaa,111 aaa,bbb,222 aaa,ccc,333 aaa,ddd,999 下記のようなfileCを作ろうとしています。 fileC aaa,aaa,222 aaa,bbb,111 aaa,ccc,333 aaa,ddd,999 そこで、以下のように一列目と2列目をキーにして、sortすることにしました。 cat fileA fileB | sort -u -k1,2 -t, > fileC すると、fileCは下記のようになりました。(一行目の3列目が222ではなく、111になってしまいました) fileC aaa,aaa,111 aaa,bbb,222 aaa,ccc,333 aaa,ddd,999 キー項目以外はfileAを優先させたいのですが、なにか良い方法はないでしょうか?

  • UNIX: catコマンドで無限ループ???

    正確にはOS X 10.9.5のbashですが、UNIX一般の質問と思われるのでこのようなタイトルにしました。 catコマンドで、あるテキストファイルのあとに、同じテキストファイルをつくろうと思いましたが、無限ループになってしまい、巨大ファイルができてしまいます。 最初、このようにしてa.txtという1行のファイルを作りました。  [~]$ cat > a.txt  aaa それで、同じa.txtを  aaa  aaa という2行のファイルにしたいと思い、以下のようなコマンドを入力しました。 [~]$ cat a.txt >> a.txt 自分の目論見としては、a.txtの内容がa.txtに追加されるので、2行になるかと思いましたが、応答がなくなりました。 Ctrl+Cで停止し、a.txtの内容を見ると [~]$ cat a.txt aaa aaa aaa aaa aaa aaa ・・・・・・ と何千行も入っています。 ファイルのサイズはこれぐらいでした。 [~]$ ls -al a.txt -rw-r--r-- 1 TYWalker staff 16898724 9 22 12:57 a.txt これは、なぜこのような現象になるのでしょうか。 また、私が本来やろうとしたことを、簡単なコマンドで行うにはどうすればいいでしょうか。 よろしくお願いします。

  • バッチファイルで「,]区切りの文字を抜き出したい

    現在、バッチを作成しているのですが、txtファイルからの文字の抜き出しがうまくいきません。 findstr /b "aaa" C:\tmp\test.txt 上記で行毎では抜き出せるのですが、それから[ , ]区切り毎の抜き出し方がわかりません。 [test.txt] aaa,bbb,ccc,ddd eee,ffffff,ggggg,hhhh   ・   ・   ・ 下記のようにそれぞれ変数に代入したいと考えております。 aaaで実行する場合。 hoge1=aaa hoge2=bbb hoge3=ccc hoge4=ddd eeeで実行する場合。 hoge1=eee hoge2=fffff hoge3=ggggg hoge4=hhhh 変数への代入はfor文を使用しようと考えております。 追記いたしますと、各hoge~は先頭の[hoge1]を除き、行毎に文字数が異なり、行数は100行を超えますので、なんとかバッチの方で割り当てたいと考えております。 お知恵をよろしくお願いいたします。

  • Windowsのバッチファイルを利用しtxtファイルの指定のした位置に文字を追加する方法

    現在、下記内容のファイル(test.txt)指定した行に指定文字を追記できる方法を探しております。 【test.txt内容】 [test1] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test2] [test4] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test5] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: end 【追記したい内容】 test.txtの"[test2]"行の下の行に以下の文字を追記したいです。 [test3] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: 指定行に追記するというコマンド自体はないと思い、batやwshの本などを読んではいるのですがなかなか良い考えが浮かびません。 ご教示の程よろしくお願いいたします。

専門家に質問してみよう