我正在尝试将新对象插入feLinks
数组,因此我尝试将关闭数组标记];
作为目标,这样我就可以将对象附加到数组中。
我正在尝试匹配第一次出现的];
,因此我可以注入一个新对象
我确实知道懒惰的量词,但却无法使其发挥作用。
var fedLinks = [{
Name:" Test",
data:'value',
tag:"first"
}];
var fedSet = [
{
Name:"Dashboard",
data:fedLinks
}];
这是我试过的
];.+?
但它没有返回匹配
答案 0 :(得分:1)
$ sed -nr ':start;/\];/!{p;n;bstart};SUBSTITUTE;:end;p;n;bend'
说明:
:start;/\];/!{p;n;bstart}
:使用循环打印与包含\];
的第一行匹配的内容。:end;p;n;bend
:使用新的loop
打印第一个];
之后的行。在此,我将s
命令用于substitute
null char
与}
之间的]
object
使用您的新s/(})(])/\1,{\n name: "test2",\n data: "value2",\n tag: "second"\n}\2/
:
$ cat test.txt
var fedLinks = [{
name: "test1",
data: "value1",
tag: "first"
}];
var fedSet = [
{
name: "Dashboard",
data: fedLinks
}];
例如:
object
我们要将另一个fedLinks
添加到$ sed -nr ':start;/\];/!{p;n;bstart};s/(\})(\])/\1,{\n name: "test2",\n data: "value2",\n tag: "second"\n}\2/;:end;p;n;bend' test.txt
var fedLinks = [{
name: "test1",
data: "value1",
tag: "first"
},{
name: "test2",
data: "value2",
tag: "second"
}];
var fedSet = [
{
name: "Dashboard",
data: fedLinks
}];
数组:
first }];
我们可以改变思考如何实现功能的方式。我们可以找到complete feLinks array block
,而不是找到insert
,然后进行$ sed -r '/fedLinks.*\[\{/!bend;:loop;N;/\}\]/{SUBSTITUTE;bend};bloop;:end'
操作。
fedLinks.*\[\{
说明:
array
:找到要插入新对象的end
的开头;或者只是跳转到标签:loop
以从流中读取下一行。loop
:设置标签remaining
以阅读属于fedLinks
数组的N;...;bloop
行。\n
:将pattern space
和流的下一行追加到与\}\]
匹配的fedLinks
util,这意味着/\}\]/{SUBSTITUTE;bend};bloop
数组的结束。fedLinks
:在获取属于fedLinks
数组的所有行时处理end
数组,然后跳转到标签$ sed -r '/fedLinks.*\[\{/!bend;:loop;N;/\}\]/{s/(})(])/\1,{\n name: "test2",\n data: "value2",\n tag: "second"\n}\2/;bend};bloop;:end' test.txt
var fedLinks = [{
name: "test1",
data: "value1",
tag: "first"
},{
name: "test2",
data: "value2",
tag: "second"
}];
var fedSet = [
{
name: "Dashboard",
data: fedLinks
}];
。例如:
let dd = getCharacteristic.value!;
print(String(data: dd, encoding: String.Encoding.ascii)!);
答案 1 :(得分:1)
将awk与文字字符串一起使用,以获得健壮性,可移植性和清晰度(使用sed解决方案时无法使用这些字符串):
awk '
NR==FNR{ add=(NR>1 ? add ORS : "") $0; next }
s=index($0,"];") { $0=substr($0,1,s-1) add substr($0,s); add="" }
1' add.txt test.txt
上面从文件“add.txt”中读取新记录作为文字字符串,然后在文字字符串“]之前插入;出现在“test.txt”中并再次打印结果作为文字字符串。这样您就不必担心转义字符或正则表达式元字符或反向引用或任何输入文件中的任何其他内容 - 所有内容都将在您键入时完全重现。它也可以在任何UNIX机器上与任何awk一样工作。
例如(借用@ Weike的样本添加文字):
$ cat test.txt
var fedLinks = [{
name: "test1",
data: "value1",
tag: "first"
}];
var fedSet = [
{
name: "Dashboard",
data: fedLinks
}];
$ cat add.txt
,{
name: "test2",
data: "value2",
tag: "second"
}
$ awk 'NR==FNR{add=(NR>1 ? add ORS : "") $0; next} s=index($0,"];"){$0=substr($0,1,s-1) add substr($0,s); add=""} 1' add.txt test.txt
var fedLinks = [{
name: "test1",
data: "value1",
tag: "first"
},{
name: "test2",
data: "value2",
tag: "second"
}];
var fedSet = [
{
name: "Dashboard",
data: fedLinks
}];