テキスト行の文字列の前後の Grep 変数番号

テキスト行の文字列の前後の Grep 変数番号

テキスト行で数字を探したいです。

cat log.txt | grep "License term"

01/01/2024:00:30 License term is 123 days.

私はこれから「マイナス」を分離したいと思います。キーワードマッチングの前後に単語をエコーする方法はありますか? ""is"の後に文字列を出力します"または""days"の前に文字列を出力します"のように?

おそらく同じように見えますが、今後は変わる可能性があります。 (ログエントリの書式やその他のテキストが追加されます)

ベストアンサー1

次のコマンドは、正規表現に一致するすべての行、つまり部分文字列を含むすべての行、オプションの正の整数、行の末尾に部分文字列が続くすべての行を検索しますsed。これらの行が見つかった場合は、行全体を整数に置き換え、変更された行を出力して、要求された番号を効果的に抽出します。log.txt.*License term is \([0-9]*\) days\.$License term is days.

sed -n 's/.*License term is \([0-9]*\) days\.$/\1/p' log.txt

別の方法はを使用することですawk。以下は、文字列を含む行のみを一致させてLicense termから、その行から2番目のスペースで区切られた単語を出力する、やや異なるアプローチです。

awk '/License term/ { print $(NF-1) }' log.txt

明らかに、文字列を含む行からスペースで区切られた5番目のフィールドを削除するためにとgrep組み合わせることもできます。cutLicense term

grep -F 'License term' log.txt | cut -d ' ' -f 5

ここでは、正規表現の代わりに文字列を使用して検索していることを示すために、そのgrepオプションを使用しています。-F

おすすめ記事