从bash脚本生成蛇小写输出

时间:2016-07-20 05:10:16

标签: bash awk sed

我有一个bash脚本,它接受查询并生成json。我希望生成新的json格式为

{ "symbols" : "my_name"
  "nid" : "MyName"
}

您可以帮我修改此查询吗

QUERY='SELECT row_to_json(o) FROM (SELECT nid , nid(????) as symbols FROM batch_types ORDER BY id::integer) AS o';
echo $QUERY | psql -h localhost -U report mcore -t $@ | jq -s '.' > generated/enum/batch_type.json

我期待jq之后的一些sed为jq -s '.' | sed "..."

我从PostgreSQL获取数据。

示例:

sql的输出可能是`

[
 {"name" : "Xml"
  "symbol" : "Xml"
 },
{ "name": "Java",
  "symbols": "Java"
}
]

[
 {"name" : "Xml"
  "symbol" : "xml"
 },
{ "name": "Java",
  "symbols": "java"
}
]

2 个答案:

答案 0 :(得分:1)

我更喜欢awk

awk 'BEGIN{RS="^$"}{print tolower($0)}' >outfile

awk [ manpage ]说:

  

tolower(str)
返回字符串str的副本,包含所有字符串   str中的ppercase字符翻译成它们对应的   小写的对应物。非字母字符保持不变。

修改

如果您尝试仅转换"符号"值为小写,请使用以下内容:

...jq -s '.' |  awk '/^\{*[[:blank:]]*"symbol[s]?"[[:blank:]]*:/{
$0=tolower($0);}1'' >outfile

<强>输出

[
 {"name" : "Xml"
  "symbol" : "xml"
 },
{ "name": "Java",
  "symbols": "java"
}
]
带有awk-regex的

旁注: ?最多匹配一个匹配,在这种情况下匹配symbolsymbols

答案 1 :(得分:0)

我能够使用  sed -r '/symbol/ s/([a-z])([A-Z])/\1_\L\2/g' | awk '/^\{*[[:blank:]]*"symbol[s]?"[[:blank:]]*:/{ $0=tolower($0);}1'''

感谢大家的努力。