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'