unix系のテキスト処理コンソールコマンド(grep sed等)を使いはじめました。

単一もしくは複数のファイル(ログ)から、grepで必要な単語がある行だけを抜き出して、sedで不必要な部分を置き換えにより消していき、ユニークな情報を外のファイルにリダイレクトする、と言うような流れで使うことは理解しました。が、簡単なバッチ書いてみて早速つまずきました。

タグに囲まれた複数行に渡るテキストを、タグを削り、改行を削り一行にして取り出すにはどうしたらよいのでしょうか。

どうもgrepもsedも行単位で処理するようで、やりかたがわかりません。また、sedから出力した一単語のみのテキストを連結すると、改行が付加されて複数行になってしまいます。

よろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:2006/10/08 17:20:05
  • 終了:2006/10/15 17:25:02

回答(1件)

id:talepanda No.1

talepanda回答回数57ベストアンサー獲得回数122006/10/08 17:53:56

ポイント60pt

複数行は割と面倒ですよね

一例として、ファイルがそんなに大きくなければ、一行に連結してからgrep、sedでいいのでは?

こんなデータ(t.dat)

<tag>hoge
hogehoge
hoge</tag>
bokeboke
<tag>hogehoge
hogehogehoge
hoge</tag>
bokeboke

に対して、

$ awk '{printf("%s",$0)}' t.dat | grep -o '<tag>[^<]*</tag>' | sed 's/<\/*tag>//g'
hogehogehogehoge
hogehogehogehogehogehoge

ファイルが大きくてメモリに全部読み込むのがイヤなら、私なら多分awkだけでやってしまいます。

id:Sakon

素早い解答ありがとうございます。

まだこれをみただけでは、ぜんぜんわかりませんが、少しずつ弄ってみていろいろと動作を追っかけてみます。

2006/10/08 21:13:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません