从字符串中提取特定数据

Sac*_*hin 2 grep string shell-script data

这是数据:

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
Run Code Online (Sandbox Code Playgroud)

我只想提取写在“直到:”字之后的数据。

例如我应该只得到Sun Nov 24 12:11:28 EST 2019.

Rud*_*diC 8

也试试

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
Run Code Online (Sandbox Code Playgroud)

甚至更短

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
Run Code Online (Sandbox Code Playgroud)

  • 也可以使用 "until:" 作为字段分隔符并打印第二个字段:`awk -F 'until: ' '{print $2}'` (2认同)

gle*_*man 5

使用 GNU grep

echo "$string" | grep -oP 'until: \K.*'
Run Code Online (Sandbox Code Playgroud)

匹配单词“直到:”,然后\K忘记刚刚匹配的所有内容,然后.*可以匹配之后的所有内容。

  • 后视的缺点之一是图案必须具有固定的宽度。该限制不适用于 `\K` (2认同)