Linux 使用sed/awk从每行提取多个字符串

Linux 使用sed/awk从每行提取多个字符串,linux,awk,sed,grep,Linux,Awk,Sed,Grep,我有一个包含3000万行的文件(这么大的文件) 每一行我都有这样的数据: "title": "some title" (SOME RANDOM DATA) "rank": "1,292,064" 我需要提取标题值和排名值,以便: some title:1,292,064 帮不上什么忙?:)我已经尝试了我的小心脏,但什么都没有,只能从每行提取一段数据除非引号之间可能有转义引号,以及其他类似的棘手问题,我会尝试使用此sed命令来过滤您的大文件: sed 's/^"[^"]*": "\([^"]*

我有一个包含3000万行的文件(这么大的文件)

每一行我都有这样的数据:

"title": "some title" (SOME RANDOM DATA) "rank": "1,292,064"
我需要提取标题值和排名值,以便:

some title:1,292,064

帮不上什么忙?:)我已经尝试了我的小心脏,但什么都没有,只能从每行提取一段数据

除非引号之间可能有转义引号,以及其他类似的棘手问题,我会尝试使用此sed命令来过滤您的大文件:

sed 's/^"[^"]*": "\([^"]*\)".*"\(.*\)"$/\1:\2/'
基本上,您可以查找包含所需字段的两个子组
\1
\2
,然后打印它们,并用
分隔

如果字符串标题不常见,则作为参数传递给sed的正则表达式就不那么难看了:

sed 's/^"title": "\([^"]*\)".*"\(.*\)"$/\1:\2/'
更安全的是,为了避免随机数据的副作用:

sed 's/^"title": "\([^"]*\)".*"rank": "\(.*\)"$/\1:\2/'

如果是JSON文件,请告诉我们好吗?如果是的话,AWK/SED不是正确的方法,JQ更适合于专家建议,请在适当的情况下做一个没有“代码>(一些随机数据)< /代码>的样本,弊大于利。谢谢。我同意詹姆斯·布朗的观点。我们需要知道引号之间的字段是否可以有转义引号,以及随机数据是否可以包含括号。我们假设在你的字段中没有新的行,尽管它被引文包围。我在中间放置随机数据的原因是中间的数据是随机的,而不是我可以键入的。由于它是随机的(包括特殊字符和空格),超过3000万次。您知道如何执行sed替换命令吗?他们中有三个会做这项工作。看起来仍然不起作用,你能试试下面这句话吗:“title”:“natural”g4j()K | S(&“L<”rank):“1292,06”“它是有效的。我得到了
CareNatural茶树无痤疮精华套装,天然和有机:1292,06
作为输出。哎呀?你在我测试时编辑了你的评论吗?不管怎样,它也在使用后一个输入
“title”:“Natural”g4j()K|S(&“L<“rank”):“1292,06”“
,我得到了
natural:1292,06
作为输出。在运行代码后,它大部分时间都工作得很好,但我没有注意到某些行的末尾也添加了一些随机数据,这导致它不输出秩,而是输出随机数据,有什么方法可以解释吗?如果没有,就这样吧。”。