テキスト行で数字を探したいです。
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
組み合わせることもできます。cut
License term
grep -F 'License term' log.txt | cut -d ' ' -f 5
ここでは、正規表現の代わりに文字列を使用して検索していることを示すために、そのgrep
オプションを使用しています。-F