使用 sed 在特定模式上添加新行

使用 sed 在特定模式上添加新行

我想在第二个空间上拆分“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'

相关内容