使用bashNOTJQ转换为小写的json键
我有一个 json,它是具有下一个语法的字典列表:
[
{
"Date_and_Time": "Dec 29, 2017 15:35:37",
"Componente": "Bar",
"IP_Origen": "175.11.13.6",
"IP_Destino": "81.18.119.864",
"Country": "Brazil",
"Age": "3"
},
{
"Date_and_Time": "Dec 31, 2017 17:35:37",
"Componente": "Foo",
"IP_Origen": "176.11.13.6",
"IP_Destino": "80.18.119.864",
"Country": "France",
'Id': '123456',
'Car': 'Ferrari'
},
{
"Date_and_Time": "Dec 31, 2017 17:35:37",
"Age": "1",
"Country": "France",
'Id': '123456',
'Car': 'Ferrari'
},
{
"Date_and_Time": "Mar 31, 2018 14:35:37",
"Componente": "Foo",
"Country": "Germany",
'Id': '2468',
'Genre': 'Male'
}
]
json 真的很大,每个字典都有不同数量的键/值字段。而我想要做的是将KEYS的每个字符都改写成小写。预期输入:
[
{
"date_and_time": "Dec 29, 2017 15:35:37",
"componente": "Bar",
"ip_origen": "175.11.13.6",
"ip_destino": "81.18.119.864",
"country": "Brazil",
.
.
.
回答
awk 'NF>1{$1=tolower($1)} 1' FS=: OFS=: file
perl -pe 's/.*?:/L$&/' file
GNU sed:
sed 's/[^:]*:/L&/' file
将:每行字符之前的所有内容转换为小写。为了使其正常工作,每个键/值对必须占据一行,并且键不能包含:字符。在 awk 中,它可以通过拆分 at 来完成,:以便可以转换第一个字段。在 perl 中,替换运算符用于将第一个之前的所有内容替换为:自己被L转义符小写的内容(信息 in man 1 perlop, perldoc.perl.org)。GNU sed 提供了一个类似于 perl 的L序列(仅可用于s///in sed的替换部分)。