我想在第二个空间上拆分“vulnid”:“CVE-2018-17435 (hdf5)splitmehere”。我如何使用 sed 来实现这一点?
我的输入:
"vulnid": "CVE-2018-17435 (hdf5)splitmehere"
"stuff":"stuffhere(somedata)"
"vulnid": "CVE-2018-17435 (hdf5)splitmehere"
"stuff":"stuffhere"
"vulnid": "CVE-2018-17435 (hdf5)splitmehere"
"stuff":"stuffhere"
预期输出:
"vulnid": "CVE-2018-17435"
"product:" (hdf5)splitmehere"
"stuff":"stuffhere(somedata)"
"vulnid": "CVE-2018-17435"
"product:" (hdf5)splitmehere"
"stuff":"stuffhere"
"vulnid": "CVE-2018-17435"
"product:" (hdf5)splitmehere"
"stuff":"stuffhere"
我尝试过使用这个表达式的变体:
sed -r 's/(*.*) (*.*) (*.*)/\1 \2 \3/'
答案1
一种可能的解决方案:
$ sed 's/\("vulnid":\) \(.*\) \(.*\)"/\1 \2"\n"product": "\3"/' file
"vulnid": "CVE-2018-17435"
"product": "(hdf5)splitmehere"
"stuff":"stuffhere(somedata)"
"vulnid": "CVE-2018-17435"
"product": "(hdf5)splitmehere"
"stuff":"stuffhere"
"vulnid": "CVE-2018-17435"
"product": "(hdf5)splitmehere"
"stuff":"stuffhere"
答案2
你自己的建议
sed -e "s/ /\n/2"
几乎就是你所描述的那样。剩下的就是"product:"
在换行符周围放置额外的文本:
sed -e 's/ /"\n"product:" /2'
(我将外部引号更改为单引号,以便在表达式内使用双引号。)
某些版本sed
可能不会解释\n
为换行符。这sed
规格状态:
可以通过将 <newline> 替换到其中来分割行。应用程序应在替换中通过在 <backslash> 前面添加 <newline> 来转义它。
IE。
sed -e 's/ /"\
"product:" /2'