如何在bash中使用awk、sed或其他方法提取文件中的特定字符串?

如何在bash中使用awk、sed或其他方法提取文件中的特定字符串?,bash,shell,awk,sed,Bash,Shell,Awk,Sed,我有一个包含以下文本的文件(具有不同值的多行): 我想提取start\u令牌和end\u令牌的值。我尝试了awk和cut,但我无法找出提取目标值的最佳方法 比如: cat filename| get the values of start_token and end_token 正如他在评论中指出的那样,这种方法的一种(可能更有效)变体使用了\K,即可变宽度查找: grep -oP 'token:\K\d+' \K将所有已匹配的内容保留在其左侧,但不包括在匹配中(请参阅)。使用awk: aw

我有一个包含以下文本的文件(具有不同值的多行):

我想提取
start\u令牌
end\u令牌
的值。我尝试了awk和
cut
,但我无法找出提取目标值的最佳方法

比如:

cat filename| get the values of start_token and end_token
正如他在评论中指出的那样,这种方法的一种(可能更有效)变体使用了
\K
,即可变宽度查找:

grep -oP 'token:\K\d+'

\K
将所有已匹配的内容保留在其左侧,但不包括在匹配中(请参阅)。使用
awk

awk -F '[(:,]' '{print $3, $5}' file
8050285221437500528 8051783269940793406
第一个值是
start\u令牌
,最后一个值是
end\u令牌

sed版本

sed -e '/^TokenRange(/!d' -e  's/.*:\([0-9]*\),.*:\([0-9]*\),.*/\1 \2/' YourFile

如果你已经试过了,你的问题会告诉我们。你想要的结果是什么?您是想将这两个值提取到单独的shell变量中,还是只是将它们打印出来,或者做什么?@hek2mgl噢,太好了!更短、更高效的终极组合:)
grep -oP 'token:\K\d+'
awk -F '[(:,]' '{print $3, $5}' file
8050285221437500528 8051783269940793406
sed -e '/^TokenRange(/!d' -e  's/.*:\([0-9]*\),.*:\([0-9]*\),.*/\1 \2/' YourFile