一致後に残りの行を印刷するには、grepを使用します。

一致後に残りの行を印刷するには、grepを使用します。

まあ、これが私を狂わせている!ログファイルからいくつかの情報を収集し、電子メール通知の要約に追加しようとしています。

ログから:

2019/07/22 11:36:03 [14396] 生成されたファイル数: 3 (reg: 2, dir: 1)

最後の部分、3、2、1、または最後の部分3(reg:2、dir:1)の数字だけを印刷したいと思います。

私は別の方法を試してみましたが、これが私が得た最も近い方法ですが、数字3だけを印刷し、私が望む残りの情報は印刷しません。

nf=$(grep -o 'created files:' $logfile) | cut -d\   -f3)

これは可能ですか?

編集する:

わかったので、私はこれを働くのに使っています。nf=$(grep -Po 'created files: \K.*' "$logfile")

要約すると、次のような出力を得るために$ nfを追加すると、Created $nf new files次のような結果が得られます。

3つ(reg:2、dir:1)新しいファイルが作成されました。

これで、どういうわけかこれをさらに分割して結果を次のようにすることができますか? 1つのディレクトリと2つのファイルが作成されました。

たぶん、2つの別々のgrepコマンドを使って異なる変数を出力できますか? 1つはdir用、もう1つはreg用です。

ベストアンサー1

grepPerl互換正規表現(PCRE)をサポートしている場合:

$ grep -Po 'created files: \K.*' "$logfile"
3 (reg: 2, dir: 1)

数値を配列に保存するには、次の手順を実行しますbash

$ numbers=( $(grep -o 'created files:.*' "$logfile" | grep -o '[0-9]\+') )
$ echo ${numbers[@]}
3 2 1
$ echo "${numbers[0]}, ${numbers[1]}, ${numbers[2]}"
3, 2, 1

おすすめ記事