【问题标题】:add string to the beginning of a file and another string to the end of a file将字符串添加到文件的开头,将另一个字符串添加到文件的末尾
【发布时间】:2017-02-07 04:16:09
【问题描述】:

这是我的文件

$ 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。

【问题讨论】:

标签: bash awk sed


【解决方案1】:

试试:

$ 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] }
    

    【讨论】:

    • tks @ed。你能简单解释一下吗?我知道,NR>1 在第一行,? ORS 不确定输出记录分隔符,END{print " }"} 是 END 最后一行吗? , printf "%s%s" 是开头第一个字符串的第一个 %s,第二个字符串 } 的第二个 %s 追加到末尾?
    • NR>1 在第一行之后,printf 的第二个字符串是 $0。 END 是在读取所有输入后为真的条件。 IIRC,您已经发布了几个文本处理问题 - 我推荐 Arnold Robbins 的《Effective Awk Programming, 4th Edition》一书。
    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 2011-03-16
    • 2011-08-30
    • 2012-08-03
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    相关资源
    最近更新 更多