• ベストアンサー

シェルで特定行を処理する方法を教えてください。

初めてご質問させていただきます 数時間考えましたが、全くできない初心者です。 awkとかも使ってみましたが・ちんぷんかんぷんです。 よろしくお願いいたします。 環境:RedHat、シェル:bash [やりたいこと] 特定の文字以外から始まる行を、 特定文字から始まる行へ連結させたい。 (例  aaaから始まっていない行(bbb、ccc、ddd)を、  aaaから始まる行へ出力させる。 ■元となるテキストファイル ============ aaa bbb ccc ddd aaa aaa aaa eee aaa ============ ■整形後のファイル ============ aaabbbcccddd aaa aaa aaaeee aaa ============

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

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

プログラミング初心者にはちょっと難しいですね。 awk '/^aaa/{if(save!="")print save;save=$0;next} {save=save $0} END{if(save!="")print save}' sedを使うのはさらに難しくなると思います。

jsqtw243
質問者

お礼

全く見当違いの方法で進めてました。 ご回答ありがとうございました。

その他の回答 (1)

  • chaff
  • ベストアンサー率30% (264/874)
回答No.1

UNIXは10年以上触っていないので、あまり具体的な助言ができないのですが.... 私なら 「正規表現」と「sed」を使いますね。 ご存知かもしれませんが、 「正規表現」とはパターンによって文字を特定するルールの一つ(例:'*" は一つ以上の文字)で、UNIX系OSなら必ず実装されています。 「sed」とは'StreamEDitor'の略で、awkと並んでこれもUNIX系OSならほとんど持っているユーティリティです。 詳しくはgoogleかなにかで調べてみてください。 sedの市販本(大抵、正規表現の詳しい説明も載っています)も多いですよ。今は知らないけれど..... 正規表現を使うとこのようなことができます。 ・特定の文字から始まる行の文字列の抽出 sedを使うとこのようなことができます。 ・正規表現で特定された文字列の編集 ・キャリッジリターン(改行)の削除  →行への連結 どうですかね?

jsqtw243
質問者

お礼

sedでも試してみましたが、自分には難しかったです。 改行を削除するパターンをどう使えばうまくいくのか・・・。 勉強になりました。ありがとうございました。