人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

よろしくお願いします。

●質問者: Sakon
●カテゴリ:コンピュータ
✍キーワード:grep SED UNIX コマンド タグ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● talepanda
●60ポイント

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

一例として、ファイルがそんなに大きくなければ、一行に連結してから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だけでやってしまいます。

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ