实现你想要的
sed
,您需要捕获模式中的令牌并使用对它的后向引用作为替换:
$ cat data
TOKEN=57ac8392-1ecc-4e17-9350-c9c866ac832b\n","stream":"stderr","time":"2018-12-16T19:55:54.032838023Z"}
$ cat data | sed -e 's/.*TOKEN=\([-a-f0-9]\+\)\\n.*/\1/'
57ac8392-1ecc-4e17-9350-c9c866ac832b
你在使用GNU吗
grep
?如果是这样的话,您可以简单地使用令牌,如下所示:
$ grep -sPo '(?<=TOKEN=)[-a-f0-9]+' < data
57ac8392-1ecc-4e17-9350-c9c866ac832b
解释:
在GNU中
格雷普
,
-P
将给定模式解释为
PCRE
,这将启用传统POSIX正则表达式语言中不可用的功能。其中之一是“积极的后视”,由
(?<=...)
这实际上告诉regex引擎后退一步,看看lookbehind中的文本是否可以在那里匹配,但实际上不匹配。这允许您对给定字符串进行“锚定”匹配,但不捕获它们。
这个
-o
标记为
格雷普
简单地告诉它只打印给定输入的匹配部分。
结合起来,这两个标志允许我们使用
TOKEN=
在模式中锚定匹配,但只打印真正的令牌数据。