(私の最初のアプローチは正しくなかったので、修正します)
を使用したことはありませんが、オプションsocat
がある場合-v log.txt
は、オプションで表示されるように、結果を標準エラー出力にも出力する可能性のある解決策があります-v
。
ログファイルをlog.txtに送信し、最初の10行を切り取り、すべての\r
文字を削除したいと思います。プロセス置換をサポートするbashでは、次のように実行できます。
socat -v ... 2> >(awk 'NR>10 {gsub("\r","");print}'>log.txt)
(2つのマークの間のスペースに注意し>
てください!!!)
これにより、プロセスが作成され、次の>(...)
ようなファイルが返され、そのファイル/dev/fd/68
にリダイレクトさstderr
れます。実際には、これは括弧 ( awk
) 内で指定されたプロセスへのパイプです。したがって、テキストはawkを通過し、その出力は に書き込まれlog.txt
ます。
あなたが言ったように、あなたはawkを持っていません。これはsed (またはパイプですが、追加のプロセスが必要です)tail
を使用して解決できます。tr
socat -v ... 2> >(sed -e '1,10 d' -e 's/\r//g' >log.txt)
(2つのマークの間のスペースに注意し>
てください!!!)
cygwinはこれをサポートしていないようですが、かなり古い RedHat Linux で動作しました。
実際に使用することもできます-lf
(これで必要なものがすべて出力されるかどうかはわかりません。-v
より良い選択があれば...):
-lf <logfile>
Writes messages to <logfile> [filename] instead of stderr.
Some third party libraries, in particular libwrap, might not obey
this option.
したがって、元のアプローチも機能します。
socat -lf >(sed -e '1,10 d' -e 's/\r//g' >log.txt) ...
これが役立つことを願っています!