リモートBorgBackupリポジトリで標準エラー出力をフィルタリングする

リモートBorgBackupリポジトリで標準エラー出力をフィルタリングする

ステータス情報を標準エラーとして出力するコマンドの標準エラーをフィルタリングしたいと思います。この場合、ボグバックアップ。特に、デフォルト出力には次borg checkの行が含まれます。

Checking segments ...

標準エラーとして送信します。 cronの操作に面倒なので、この行をフィルタリングしたいと思います。現在(現在1.0.2borgこの出力は設定で無効にすることはできません。

使ったGillesが説明した方法。これはローカルBorgリポジトリに適しています。たとえば、次のようになります。

{ borg check '/media/faheem/My Passport/backup-Mail' 2>&1 1>&3 | tr '\r' '\n' | grep -v "^Checking segments" 1>&2; } 3>&1

ただし、リモートリポジトリの場合、状況は若干異なります。出力は次のとおりです。

Remote: Checking segments 99.3% 
Remote:

これらの2つの状況を排除するために、逆方向grepをどのように修正しますか?

{ borg check faheem@ramnode:/mnt/backup-Mail 2>&1 1>&3 | tr '\r' '\n' | grep -v ":Checking segments" 1>&2; } 3>&1

最初のケースでは機能しますが、2番目のケースでは機能しませんRemote:。 2つのgrepを使用できますが、1つの式を使用することを好みます。

ベストアンサー1

grepでメッセージをフィルタリングするには、-E拡張正規表現フラグ(?以下の「0または1」の意味)と-v逆方向の一致を導入してください。

grep -Ev '^Remote:( Checking segments [[:digit:]]{1,3}\.[[:digit:]]%)?$'

これは、次の行が(逆方向に)一致する必要があることを意味します。

  • 行の始まり^
  • ひもRemote:
  • 次のいずれか0または1に一致するグループ化された(...)文字セット(前のスペースを含む):Checking segments ...?
  • これ[[:digit:]]は、1〜3桁の数字、ピリオド、数字、%記号の順に一致することを意味します。
  • すべて行末に固定$

OPのさらなる説明によると、最終的なgrepは次のようになります。

grep -Ev "^Remote:\s*(Checking segments.*)?$"

「Remote:」という単語に一致するすべての行を削除し(^行の先頭から始まり)、スペースを削除するか、スペースを削除してから、次の操作を行います。

  • 何もない

  • 「セグメントの確認」というフレーズ自体の後には、任意の文字(または文字なし)が続きます。.*

...そして行の終わり$

おすすめ記事