一行に Grep

一行に Grep

改行なしで1行にパターンをストリーミングするスクリプトがあります。grep stock_tickerその行で見つけてすぐに出力したいです。これでスクリプトは終了せず、デフォルトでは無限に繰り返されます。

この問題を解決するもう1つの方法は、入力ストリームをラインに分割し、それをgrepにパイプすることです。私はあなたが印刷できることを知っています。しかし、私の理解によると、から1行ずつすべてを読むgrepことがわかりましたgrepsedawk

とにかく、この動作を変更して作業できますか?

./a.out | grep 'stock_ticker'

現在出力されますMemory exhausted。これは、grepが出力を吐き出す前に1行ずつ読み取るためです。私はこの行動を変えたいと思う。どんなアイデアがありますか?

答え1

改行文字がない場合、grepは文字列が表示される「行」を表示できるようにすべての入力をバッファリングします。

2つの質問:

  • 隣接するコンテンツが必要ですか?
  • トークンを区切るスペースや他の文字がありますか?

隣接するコンテンツのコンテキストを必要とせず、トークンを区切るスペースがある場合は、trを使用してスペースを改行に変換します。

./a.out | tr ' ' '\n' | grep 'stock_ticker'

隣接するコンテンツが必要な場合は、grepコマンドにオプションの1つを追加するだけです-C -A-Bこれにより、grepは検索モードで株式の前後に「行」を表示します。

関連情報