我的文字是
"Example": "Example2",
"What": "Huh",
"Really": "yes",
"" 中的文本总是会改变,但其他一切总是保持不变。我需要把它变成这种格式:
"Example2": {
"Name": "Example",
},
"Huh": {
"Name": "What",
},
"yes": {
"Name": "Really",
},
这里是一样的。"" 中的文本总是会改变,但其余的保持不变。您可能已经注意到,文本也被反转了,这意味着前面的“示例”现在位于后面,反之亦然。你知道如何自动化这个过程吗?
我的操作系统:macOS、Kali Linux 和 Win11
注意:引号表示字符串,因为这将用于编程它们只是用来告诉计算机这是一个字符串,它们可以从原始形式转移到第二种形式,也可以是第二种形式自始至终,这真的无关紧要。此外,只有字母 ( )、- 、_ 、点和逗号可以出现在 "" 内的文本中。
到目前为止我尝试了什么:当我尝试用谷歌搜索时,我发现只有格式(如斜体、粗体等)不是我想要的,这意味着我什至不知道从哪里开始,不知道我需要/想要使用的工具,除了 zapier formater 没有尝试过任何工具
以下
sed
命令将识别每个输入行的前两个双引号字符串,并以所需格式输出它们:注释(如果您想出于任何原因修改解决方案,则很有用):
我使用制表符 (
\t
) 进行缩进。如果需要,请用空格替换。*
是贪婪的,但[^"]
意思是“除了”之外的任何字符"
。实际上,代码捕获了前两个带引号的字符串。输入语法的其余部分无关紧要。通过使用.*
代替,[^"]*
您可以捕获最后两个引用的字符串:这对于有问题的示例同样适用,但在概念上它是不同的。尽管这个版本作为
sed
代码更简单,但我更喜欢我原来的解决方案。原因是:如果输入格式曾经被扩展并允许额外的(可能是可选的)双引号字符串,那么额外的字段很可能会出现在已经定义的字段之后。代码[^"]*
将与扩展格式兼容(在它设计处理的两个字段的范围内)。如果通过在前面添加字段来扩展格式,则代码.*
会更好,这似乎不太可能。我可以在捕获组中包含引号,这将导致替换代码稍短(例如
\2:
,而不是"\2":
)。我决定不这样做,因为我发现引号属于语法,而不是数据。我的正则表达式抽象输入数据,没有任何与语法相关的内容。这种方法有些优雅。s
现在我可以通过调整(不触及正则表达式)的替换部分来构建任何输出格式。有了这些信息,使用 bash 终端并使用
awk
awk '{print $3, "\:"}{print "\{name\:", $1,"\},"}' file.txt > file.json
样本
testjason.txt
输出
这是有效的,因为
awk
处理file.txt
as 数组中的行,因此您可以使用$n
. 花括号{}
创建了一个上下文,在这种情况下您使用内置命令,print
除了使用变量之外,您还使用字符串,有些需要使用\
like进行转义,\"
因为它们是运算符。最后,
>
bash 运算符是将输出重定向到当前工作目录中的新文件