我尝试删除倒数第二行的逗号:
{ "subject" : { "value" : "http://d-nb.info/gnd/1-2", "type" : "uri" }, "predicate" : { "value" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "type" : "uri" }, "object" : { "value" : "http://d-nb.info/standards/elementset/gnd#SeriesOfConferenceOrEvent", "type" : "uri" } }, {
我正在使用此命令:
<test2.file sed '/^\s*\},$/ { N; s/^\s*\},\n\{/^\s*\}\n\{/ }'
我希望输出应该是这样的:
{ "subject" : { "value" : "http://d-nb.info/gnd/1-2", "type" : "uri" }, "predicate" : { "value" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", "type" : "uri" }, "object" : { "value" : "http://d-nb.info/standards/elementset/gnd#SeriesOfConferenceOrEvent", "type" : "uri" } } {
但它返回错误。
sed:-e表达式#1,字符42:不匹配{
有人知道它有什么问题吗? THX。
P.S。,这是文件的结尾:
{ "subject" : { "value" : "http://d-nb.info/gnd/1060867974", "type" : "uri" }, "predicate" : { "value" : "http://d-nb.info/standards/elementset/gnd#preferredNameEntityForThePerson", "type" : "uri" }, "object" : { "value" : "_:genid12768016", "type" : "bnode" } }
答案 0 :(得分:2)
请勿在您的模式/地址部分中转义{ or }
。 sed默认使用BRE。对于BRE,像{ ( + ..
这样的字符没有特殊含义,你必须逃脱它们才能赋予它们特殊的含义。
在您的情况下,您希望匹配文字{ or }
,然后不要逃避它们。
我想你要删除最后一个逗号,以便更改:
...
},
{
到
...
}
{
然后你可以尝试:
awk -v RS='\0' '7+gsub(/,\s*{/,"\n{")' file
使用您的文件进行测试:
kent$ awk -v RS='\0' '7+gsub(/,\s*{/,"\n{")' f
{
"subject" : {
"value" : "http://d-nb.info/gnd/1-2",
"type" : "uri"
},
"predicate" : {
"value" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#type",
"type" : "uri"
},
"object" : {
"value" : "http://d-nb.info/standards/elementset/gnd#SeriesOfConferenceOrEvent",
"type" : "uri"
}
}
{
答案 1 :(得分:0)
您可以使用缩进识别正确的行吗?
sed 's/^ },/ }/'