Adicionando nova linha usando sed em um padrão específico

0

Eu quero dividir "vulnid": "CVE-2018-17435 (hdf5) splitmehere" no segundo espaço. Como posso conseguir isso usando sed?

MINHA ENTRADA:

"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"

SAÍDA ESPERADA:

"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"

Eu tentei usar uma variante dessa expressão:

sed -r 's/(*.*) (*.*) (*.*)/  /'
    
por creed 13.11.2018 / 11:58

2 respostas

1

Uma solução possível:

$ sed 's/\("vulnid":\) \(.*\) \(.*\)"/ "\n"product": ""/' 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"    
    
por 13.11.2018 / 12:43
1

Sua sugestão própria

sed -e "s/ /\n/2"

quase faz o que você descreve. Tudo o que resta é colocar o texto extra em "product:" ao redor do linebreak:

sed -e 's/ /"\n"product:" /2'

(alterei as aspas externas para aspas simples, para usar aspas duplas dentro da expressão.)

Algumas versões de sed podem não interpretar \n como uma nova linha. A sed especificação afirma:

A line can be split by substituting a <newline> into it. The application shall escape the <newline> in the replacement by preceding it by a <backslash>.

ie.

sed -e 's/ /"\
"product:" /2'
    
por 13.11.2018 / 12:51