sedを使用して特定のパターンに新しい行を追加する

sedを使用して特定のパターンに新しい行を追加する

2番目のスペース「CVE-2018-17435(hdf5)splitmehere」で「vulnid」を分割したいと思います。これを達成するために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

考えられる解決策の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>を置き換えて行を分割できます。アプリケーションは、代替エントリで<newline>を先頭に追加して<backslash>をエスケープする必要があります。

つまり。

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

関連情報