技术求助:如何从单行文本文件提取timestamp标签后的数值
解决单行文本中提取timestamp后数值的问题
别发愁啦,单行文本的处理确实容易让人摸不着头脑,我给你整理了几个用grep和sed就能搞定的方案,直接套用就行!
先假设你的文件内容大概是这种形式(方便你对应调整):
some random text timestamp:1620000000,1620001000,1620002000 more unrelated content
用grep提取
如果你的系统支持Perl兼容正则(大部分Linux/macOS都支持),可以用这个命令:
grep -oP '(?<=timestamp:)[0-9,]+' your_file.txt
-o:只输出匹配到的部分,而不是整行-P:启用Perl正则,这样可以用正向预查(?<=timestamp:)来定位timestamp标签后面的内容[0-9,]+:匹配所有数字和逗号(如果你的数值是用空格分隔,就改成[0-9 ]+,按需调整)
如果timestamp和数值之间没有冒号(比如timestamp123456),就把正则改成:
grep -oP '(?<=timestamp)[0-9]+' your_file.txt
用sed提取
sed处理单行文本也很顺手,用替换命令把不需要的内容都去掉:
sed 's/.*timestamp:\([0-9,]\+\).*/\1/' your_file.txt
.*timestamp::匹配从行首到timestamp:的所有内容\([0-9,]\+\):把我们需要的数值部分捕获成分组.*:匹配timestamp:后面数值之外的所有内容\1:用捕获到的分组内容替换整行,最终就只剩下我们要的数值了
同样,要是数值分隔符或者timestamp格式有变化,调整括号里的正则就行。比如数值是空格分隔就改成[0-9 ]\+,timestamp是标签形式(<timestamp>...</timestamp>)就改成:
sed 's/.*<timestamp>\([0-9,]\+\)<\/timestamp>.*/\1/' your_file.txt
要是你实际的文本格式和我举的例子不一样,随时告诉我细节,我再帮你调整命令!
内容的提问来源于stack exchange,提问作者Einsiedler
相关产品推荐
相关产品推荐

