• 締切済み
  • 困ってます

シェルスクリプト(bash)によるファイルの編集

シェルスクリプト(bash)によるファイルの編集についてのご相談です。 私にあまりスクリプトの知識がないので申し訳ございませんが、 どなたかお知恵を拝借させてください。 よろしくお願いします。 【条件】 ・以下のような文字列を含むファイルが複数あるとします。 ・そして、その文字列は、ファイル内の不特定の行に存在します。 ※[半角スペース]、[タブ]は実際には便宜上記載していますが、実際は 本当の半角スペース、タブが入ります。 AAA[半角スペース]BBB AAA[半角スペース]CCC AAA[タブ]BBB AAA[タブ]CCC 【やりたいこと】 このとき、 AAA[半角スペース]BBB および AAA[タブ]BBB の行の下に、それぞれ、 AAA[半角スペース]DDD  と   AAA[タブ]DDD を挿入したいのですが、これをスクリプト(コマンド)でどのように行えば よいのかわからずに困っています。

共感・応援の気持ちを伝えよう!

  • Linux系OS
  • 回答数3
  • 閲覧数285
  • ありがとう数0

みんなの回答

  • 回答No.3
  • notnot
  • ベストアンサー率47% (4738/9986)

sedの場合、 sed '/^AAA[ ]BBB$/{p;s/BBB$/DDD/}' inputfile > outputfile [ ] の中は、空白とタブ。 awkの場合、 awk '{print;if (NF==2&&$1=="AAA"&&$2=="BBB"){sub(/BBB$/,"DDD");print}}' inputfile > outputfile どちらの場合も、AAAやBBBの中に正規表現の特殊文字が含まれる場合はそれぞれクォートが必要。

共感・感謝の気持ちを伝えよう!

  • 回答No.2

awkで追加する。 cat 入力ファイル名 | awk \ '{  if ($1=="AAA" && $2=="BBB") {   print $0   TMP0=$0;gsub($1,"",TMP0);gsub($2,"",TMP0)   print $1 TMP0 "DDD"  } }'>置き換え後ファイル名

共感・感謝の気持ちを伝えよう!

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

sed で追加する.

共感・感謝の気持ちを伝えよう!

質問者からの補足

ありがとうございます。 できればike-2000様のようにスクリプトを記述していただければ、実際に可能かどうかこちらも判断できますのでよろしくお願いします。

関連するQ&A

  • シェルスクリプトについて

    シェルスクリプトについて Linuxで先頭にスペースが入っている行をひとつ上の行につなげたいと考えています。 その場合、シェルスクリプトはどのように書けばよいかご教示願います。 【ファイル内容】 aaa △bbb ccc ddd (b行の先頭のみスペース(△)が入っています。) 【変換後のファイル】 aaa bbb ccc ddd

  • UNIX シェルスクリプト

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

  • エクセルの文字処理

    以前に同じ様な質問があったかも知れませんが、探しきれなかったので教えてください。 A1~A4の4つのセルに以下のスペースが入った文字列が入っていた場合 A1|AAA A2|AAA BBB A3|AAA BBB CCC A4|AAA BBB CCC DDD    A   B   C   D  1|    AAA 2|AAA BBB 3|AAA BBB CCC 4|AAA BBB CCC DDD という具合にしたいのです。 条件は  ・セル内にスペースで区切られない文字列があった場合には、B列に入れる  ・それ以外はスペースで区切って、A列B列C列D列に入れる  ・文字数は3文字固定ではなく全角半角が混在 以上です。すいません宜しく願いします。

  • シェルスクリプトについて

    シェルスクリプトを勉強しています。 hoge.txt内で"AAA"という文字列を"BBB"という文字列を検索し下記のような処理を行いたいです。  (1)AAA・BBBともにある場合  →スクリプトを続行  (2)AAA・BBBともにない場合  →スクリプトを停止  (3)AAAしかない場合  →BBBがありませんというメッセージを流す    (4)BBBしかない場合  →AAAなしでスクリプトを続行しますというメッセージを流す   シンプルなやり方でいいので上記のようなことを行いたい場合、どのようにスクリプトを書けばいいのか教えてください。 よろしくお願いします。

  • bashスクリプトでのテキストの検索・置換について

    下記のような形式のテキストファイルがあります。 []で囲まれた部分の文字列(セクション名)はわかっています。 各セクションの間には空行があることもあれば無いこともあります。 各セクションの記載順序は不定です。 各セクションの中の記載順も不定です。 各セクションの中の行数も不定です。 別々のセクションに同じ行があり得ます。 この場合に、bashスクリプトの中で、[def]セクションの文字列cccをccdに置き換えるにはどのような方法があるでしょうか。 awkでできるような気がするのですが、 awk '/\[def\]/{BEGINNUM = NR}' FILENAME とすれば BEGINNUM にセクションの始まりを取得できるものの、セクションの終わりの行番号の取得がわかりません。 [def]行の後に最初に出てくる[]の付いた行を検出すればよいのですが、特定の行以降で最初に出てくる文字列の行を検索するのはどうすればよいでしょうか。 あるいは、まったく異なった方法があるでしょうか。 (対象テキストファイル) [abc] aaa bbb ccc [def] aaa ccc bbb ddd [ghi] aaa eee bbb ccc (テキストファイル終了) 2007年3月25日

  • javascriptでスペース+改行を変換

    javascriptでテキストエリアなどで入力した文字列のスペース+改行を改行のみに変換したのですがうまくいきません。 例えば$を半角スペースとすると aaaaa$ bbb$ccc$ ddd$ee は aaaaa$\nbbb$ccc$\nddd$ee となっているはずですよね? それを aaaaa\nbbb$ccc\nddd$ee として aaaaa bbb$ccc ddd$ee と出力したいです。 単純にスペースをなくす処理だとbbb$cccがbbbcccになってしまいます。 正規表現などをいろいろ調べたのですが、このように行数がたくさんある文字列の変換例が載っていなくて分かりませんでした。 よろしくおねがいします。

  • ファイル処理について

    宜しくお願いします。 ファイル「ppp.txt」の中の文字列を逆にする コードを組みたいのですが、どの本を読んでも ロジックが見当たりません。 ファイルppp.txtの中は以下です。 AAA BBB CCC DDD EEE -> EEE DDD CCC BBB AAA としたいのです。 じっくり探せばあると思うのですが、 急ぎなので投稿しました。 これを実現するPerlスクリプトコードを 教えて頂けないでしょうか。 宜しくお願いいたします。

    • ベストアンサー
    • Perl
  • bashシェルについて

    bashシェルを利用しまして aiueoディレクトリ内にあります、 aaa bbb ccc abc acb bac bca cba cab というファイル内に記載されています、 123456789 という文字列を 987654321 に変更したいと考えます。 どのようなスクリプトを構成すれば、 上記の内容がクリアーできますでしょうか? よろしくお願いします。

  • 文字変換で,を改行されないようにしたい

    下記のスクリプトでファイルから読み込んだ行毎の文字列<>を'=>'に変換後、行の先頭に'を付け足し行の最後に',を付け加えた場合、変な風に改行されてしまいます。 $ cat list1.txt 01<>ああああ 01_01<>あAAA 01_02<>あBBB 01_03<>あCCC 01_04<>あDDD 02<>いいいい 02_01<>いAAA 02_02<>いBBB 02_03<>いCCC 02_04<>いDDD open(IN, "<list1.txt"); @datas = <IN>; close(IN); open(OUT, ">date.txt"); foreach (@datas) { ($a, $b) = split(/<>/, $_); print OUT "'$a'=>'$b',"; } close(OUT); 実行結果 $ cat date.txt '01'=>'ああああ ','01_01'=>'あAAA ','01_02'=>'あBBB ','01_03'=>'あCCC ','01_04'=>'あDDD ','02'=>'いいいい ','02_01'=>'いAAA ','02_02'=>'いBBB ','02_03'=>'いCCC ','02_04'=>'いDDD ', これを下記のように整形するにはスクリプトのどこを直せばよいのでしょうか。 '01'=>'ああああ', '01_01'=>'あAAA', '01_02'=>'あBBB', '01_03'=>'あCCC', '01_04'=>'あDDD', '02'=>'いいいい', '02_01'=>'いAAA', '02_02'=>'いBBB', '02_03'=>'いCCC', '02_04'=>'いDDD', どなたかご教授お願い致します。(上記のスクリプト以外の方法で スマートなやり方などありましたらあわせてご教授頂けますと助かります。)

    • ベストアンサー
    • Perl
  • エクセルマクロ 特定の文字列を含む行を削除

    エクセルマクロ 特定の文字列を含む行を削除 エクセルのマクロについて教えてください。 下の中から列を限定せず、すべての行でAAA、CCCのいずれかがある場合、 その行ごと、すべて削除したいのです。 時に削除したい特定の文字列が数十種類になるため、 マクロ起動時に削除したい特定の文字を記述したファイルを読み込み、それから 削除できるようにしたいのです。場合によってはそのファイルを編集し、 削除したい文字列を変更したいのです。 ご教示いただだけないでしょうか A列 B列 C列 1 AAA BBB CCC 2 BBB CCC FFF 3 DDD BBB FFF 4 AAA CCC DDD 5 GGG RRR UUU 行中にAAA、BBBがある場合、削除したい ↓ A列 B列 C列 5 GGG RRR UUU マクロを実行し、上記の結果にしたい。