追加の改行なしでgrepを使用して一致する部分のみを取得する方法

追加の改行なしでgrepを使用して一致する部分のみを取得する方法

与えられた正規表現に一致する各行の部分を取得し、改行を導入せずに一致する部分のみを出力するために、一種のgrepコマンドにパイプするコマンドの出力があります。

非常に類似した操作を実行することが可能であることがわかっていますが、一致grep -oする項目ごとに改行が生成され、コマンドの出力にも多くの新しい行が含まれています。

例:

入力する(私のコマンドの出力):

banana apple banana
apple bananas banned

正規表現:

ban[a-z]*

出力は次のように与えられます。grep -o:

banana
banana
bananas
banned

期待される出力:

bananabanana
bananasbanned

私が考えることができる1つは、tr改行文字をコマンド出力に現れる可能性のないいくつかの文字に置き換えるために使用し、出力をに供給してから改行grep -o文字trを再インポートするために使用することです。

mycommand|tr '\n' @|grep -o regex|tr -d '\n'|tr @ '\n'

しかし、より良い解決策が必要だと思います。どんな助けでも大変感謝します。

ベストアンサー1

使用しても問題ない場合は、以下を使用してくださいperl

mycommand | perl -lne 'print join "", /ban[a-z]*/g'

各行の一致はリストのコンテキストとして返され、null区切り文字を使用して連結できます。

おすすめ記事