我有一个包含以下文本的文件(多行具有不同的值):
TokenRange(start_token:8050285221437500528,end_token:8051783269940793406,...
我想提取start_token
和end_token
的值。我尝试了awk和cut
,但我无法找出提取目标值的最佳方法。
类似的东西:
cat filename| get the values of start_token and end_token
答案 0 :(得分:3)
grep -oP '(?<=token:)\d+' filename
说明:
-o
:仅打印匹配的部分,而不是完整的行-P
:使用Perl正则表达式引擎(用于环顾)(?<=token:)
:正面观察 - 零宽度模式\d+
:一个或多个数字结果:
8050285221437500528
8051783269940793406
hek2mgl在其评论中指出的(可能更有效)变体,使用\K
,可变宽度的后视:
grep -oP 'token:\K\d+'
\K
会保留匹配在其左侧的所有内容,但不会将其包含在匹配项中(请参阅perlre)。
答案 1 :(得分:1)
使用awk
:
awk -F '[(:,]' '{print $3, $5}' file
8050285221437500528 8051783269940793406
第一个值为start_token
,最后一个值为end_token
。
答案 2 :(得分:0)
一个sed版本
sed -e '/^TokenRange(/!d' -e 's/.*:\([0-9]*\),.*:\([0-9]*\),.*/\1 \2/' YourFile