以前はgrepに関して貴重な助けを得ましたので、これも理解できることを願っています。
これはRcloneログからのものです。
Transferred: 577.080M / 577.080 MBytes, 100%, 12.660 MBytes/s, ETA 0s
Errors: 0
Checks: 2 / 2, 100%
Transferred: 2 / 2, 100%
Elapsed time: 45.5s
私がやりたいことは、カスタムテキストで電子メール通知を作成することです。 「577MB転送、エラーのないファイル2個を45.5秒@12,660MB/sで転送」のようなものです。
したがって、これを機能させるには、この値を印刷する必要があります。私は以前の方法に従ってみましたが、成功しませんでした。ログから2回送信し、それを分割してTRF = 577.080MbytesおよびTRS = 12.660 MBytes / sを取得する方法
TRF=$(grep -o 'Transferred:.*' $logfile| cut -d\ -f4)
ERR=$(grep -o 'Errors:.*' $logfile | cut -d\ -f4)
TIM=$(grep -o 'Elapsed time:.*' $logfile | cut -d\ -f3-)
TRS=$(grep -o 'Transferred:.*' $logfile | cut -d\ -f4)
ベストアンサー1
伝達因子:
$ grep -Pom1 'Transferred:.*/ \K[^,]*' "$logfile"
577.080 MBytes
-P
Perl準拠の正規表現を有効にし、一致する出力に以前の\K
内容を含めません。\K
-o
その行の一致部分のみ出力-m1
Transferred:
2行目を除外するには、最初の一致行の後に終了します。
TRS:
$ grep -Po 'Transferred:[^,]*,[^,]*, \K[^,]*' "$logfile"
12.660 MBytes/s
- TRFに似ています:2番目のカンマの後のすべてのエントリ+コンマ以外のスペースを取得します。
-m1
パターンに複数のカンマが含まれているため、これは必要ありません。
よく:
$ grep -Po 'Errors:[[:space:]]*\K.*' "$logfile"
0
- 行末の数字のみを取得し、空白文字を削除します。
チーム:
$ grep -Po 'Elapsed time:[[:space:]]*\K.*' "$logfile"
45.5s
転送されたファイル数:(これは2つの数字の最初です)
$ grep -Po 'Transferred:[[:space:]]*\K[0-9]+(?= /)' "$logfile"
2
(?= /)
は肯定的な予測(PCRE)なので、スペースを探しています/
。この部分は\K
一致する出力に含まれていないものと同じで、最初の行がTransferred
一致してはいけません。