sed를 사용하여 특정 패턴에 새 줄 추가

sed를 사용하여 특정 패턴에 새 줄 추가

두 번째 공간인 "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

가능한 해결책 중 하나:

$ 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'

관련 정보