web-dev-qa-db-ja.com

文字列からGrep固有のデータ

データは次のとおりです。

Valid from: Fri Nov 24 12:11:28 EST 2017 until: Sun Nov 24 12:11:28 EST 2019
Valid from: Fri Feb 24 13:21:19 EST 2017 until: Thu Feb 24 13:31:19 EST 2022
Valid from: Tue Dec 20 12:01:19 EST 2016 until: Fri Dec 20 12:11:17 EST 2041

'until:' Wordの後に書き込まれたデータのみを抽出したい。

たとえば、Sun Nov 24 12:11:28 EST 2019のみを取得する必要があります。

2
Sachin

また試してみてください

awk '{sub (/^.*until: /, "")} 1' file
Sun Nov 24 12:11:28 EST 2019
Thu Feb 24 13:31:19 EST 2022
Fri Dec 20 12:11:17 EST 2041

またはさらに短い

sed 's/^.*until: //' file
Sun Nov 24 12:11:28 EST 2019
Thu Feb 24 13:31:19 EST 2022
Fri Dec 20 12:11:17 EST 2041
8
RudiC

GNU grep

echo "$string" | grep -oP 'until: \K.*'

これは「until:」という単語と一致し、その後\K一致したばかりのすべてを忘れてから、.*その後はすべて一致する可能性があります。

5
glenn jackman

awk区切り文字を"until:"に設定すると、このテキストが文字列に存在している間に後続の文字列を取得できます。 awk -F'until:' '{print $2}'

echo "Valid from: Fri Nov 24 12:11:28 EST 2017 until: Sun Nov 24 12:11:28 EST 2019" | awk -F'until:' '{print $2}'
3
igiannak

grep -o 'until: [^V]*' file | cut -d ':' -f 2-

2
Alexander

フォーマットが常に同じである場合は、次のことも試すことができます。

cut -d':' -f 5- /path-to-file