編集コマンドを使用してTail出力をXargsにパイプするときの一貫性のない動作

編集コマンドを使用してTail出力をXargsにパイプするときの一貫性のない動作

私はあきらめてSE精神に助けを求めた。これについては以下でより詳細に説明しますが、不一致をこの3行に圧縮しました。一重引用符(括弧内)の間の文字列をgrepし、xargsコマンドで使用しようとしています。

A)これは働きます:

tail -f -n 1 /var/log/a.log | grep --line-buffered -Po "\'(.*?)\'" | tr -d \'

B)これは働きます:

tail -f -n 1 /var/log/a.log | grep --line-buffered -Po "\'(.*?)\'" | xargs -t -n1 -d '\n' echo

C) 以下は行われません。

tail -f -n 1 /var/log/a.log | grep --line-buffered -Po "\'(.*?)\'" | tr -d \' | xargs -t -n1 -d'\n' echo

一度だけ減算してすぐにCtrl-Cを押すと、ランダムに動作します。これはうまくいくことを教えてくれます。ただ何かにぶら下がっているだけです。正しい出力は次のとおりです。

echo check 
check

D)この方法も機能するので、Tailに問題があると推論できますが、問題がTailにのみ発生するという意味なので、トラブルシューティングには役立ちません。

echo "Utterance: ['check']" | grep --line-buffered -Po "\'(.*?)\'" |  tr -d \' | xargs -t -n1 -d '\n' echo

.. しかし、なぜBのTailでは動作しますが、TrとXargsが結合されている場合は動作しません。代わりに、試行したさまざまな文字列抽出コマンドで同じ中断の問題(または応答なし)を確認しました。

cut -d\' -f2
awk -F '"' '{print $2}' (on double quotes)
sed -n " s,[^']*'\([^']*\).*,\1,p "
sed 's/.*\' \(.*\)\'/\1/' (doesnt work escaping single quotes)

私は(やや)ここで特に入力に焦点を当てたXargsを理解しています。xargsがtail -fで動作しないのはなぜですか?)。しかし、この答えはTailが完了していないためだと言います。これは、キャプチャされたすべてのテキストを一度にインポートして使用し、1行ずつgrep --line-buffered分解すると言います(まだ分解されているTailを使用するのとは対照的です)。スペースなど)。 -n1-d '\n'-L 1

ちなみに、-tフラグは冗長な説明(t = talk?)のためのものであり、-pは対話式検証を提供します。

EDIT1:別の奇妙なことを投稿しようとしましたが、Teeを使用して何が起こっているのかを確認しようとすると、「エコー」が発生しますか?しかし、少なくとも@steeldriverのコメントは有効です。

tail -f -n 1 /var/log/a.log | grep --line-buffered -Po "\'(.*?)\'" | tr -d \' | tee >/dev/tty | xargs -t -n1 -d '\n' echo
echo 

ベストアンサー1

おすすめ記事