改行なしで1行にパターンをストリーミングするスクリプトがあります。grep
stock_ticker
その行で見つけてすぐに出力したいです。これでスクリプトは終了せず、デフォルトでは無限に繰り返されます。
この問題を解決するもう1つの方法は、入力ストリームをラインに分割し、それをgrepにパイプすることです。私はあなたが印刷できることを知っています。しかし、私の理解によると、から1行ずつすべてを読むgrep
ことがわかりましたgrep
。sed
awk
とにかく、この動作を変更して作業できますか?
./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は検索モードで株式の前後に「行」を表示します。