2016-09-29 44 views
2

的结束,这是我的文件添加字符串到文件的开头和另一个字符串到一个文件

$ cat testjson2 
[alot of text] 

我想下面就结了:({ "aaData":附加在文件}开始在文件的结尾)附加

{ "aaData": [alot of text] } 


我有这么远:

这样做的追加在文件

$ sed '1s/./{ "aaData": &/' testjson2 
{ "aaData": [alot of text] } 

这样做的追加在文件

$ echo } >> testjson2 
$ cat testjson2 
[alot of text] 
} 

如何将它们合并结束的开始?也许只是使用sed或者我应该只是使用这个组合来得到我想要的? 只是看着在这里使用sed awk或bash。

+0

参见:[堆栈溢出正则表达式FAQ](http://stackoverflow.com/a/22944075/3776858) – Cyrus

回答

2

尝试:

$ sed '1s/^/{ "aaData": /; $ s/$/ }/' testjson2 
{ "aaData": [alot of text] } 

此使用两个替换命令:

  • 1 s/^/{ "aaData": /将文本添加到第一行的开头。

    1第1行匹配。^匹配行首。

  • $ s/$/ }/在最后一行结束后添加文本。

    第一个$匹配文件的最后一行。第二个$匹配在该行的末尾。

2
$ awk '{printf "%s%s", (NR>1 ? ORS : "{ \"aaData\": "), $0} END{print " }"}' file 
{ "aaData": [alot of text] } 
+0

TKS @ed。你能否简单介绍一下?我知道,第一行'NR> 1','? ORS'不确定输出记录分隔符,'END {print“}”}'结束最后一行? ,'printf'%s%s“'是第一个字符串在开始时的第一个%s,第二个字符串是%s,第二个字符串'}'在末尾追加? – HattrickNZ

+1

NR> 1第一行之后,printf的第二个字符串为$ 0。在读取完所有输入后,END是一个条件。 IIRC你已经发布了几个文本操作问题 - 我推荐Arnold Robbins编写的第4版Effective Awk Programming。 –

+1

我正在读它! – HattrickNZ

相关问题