SED - 다른 행의 특정 단어와 일치하는 경우에만 행 생성

SED - 다른 행의 특정 단어와 일치하는 경우에만 행 생성

내 폴더에 2개의 파일이 있다고 가정해 보겠습니다.

...
product: Nike New Awesome Running Shoe
price: 123
color: black
...
...
product: Nike New Awesome Salloon Soccer Shoe
price: 123
color: black
...

다음 시나리오를 완료해야 합니다.단일 SED 명령 사용, *.txt를 사용하는 모든 파일에서

Salloon Soccer 문자열이 포함된 경우 (product:) 행을 검색해야 합니다(이것은 예이며 다른 용어/문자열일 수 있음).

검색은 제품만 검색해야 합니다: LINE

그리고 해당 문자열이 포함된 경우에만 (venue: Interior)를 사용하여 새 행을 만듭니다. "검색어"가 포함되지 않은 다른 파일은 변경되지 않습니다. 아래 2개 파일의 결과를 살펴보세요.

...
product: Nike New Awesome Running Shoe
price: 123
color: black
...
...
product: Nike New Awesome Salloon Soccer Shoe
venue: indoor
price: 123
color: black
...

답변1

이 파일이 유효한 YAML 파일이라고 가정하면 Andrey Kislyuk의 파일을 사용하십시오 yq(제가다른 질문에 대한 내 대답):

yq -y -i '
    if (.product | contains("Salloon Soccer")) then
        .venue = "indoor"
    else
        empty
    end' *.txt

venue이렇게 하면 최상위 필드에 문자열이 포함된 모든 파일에 값이 있는 필드가 추가됩니다 . 이 옵션 덕분에 변경 사항이 즉시 적용됩니다.indoorproductSalloon Soccer-i

답변2

당신이 해야 할 일은 표현식에 일치시키려는 내용을 포함시키는 것뿐입니다. product문자열을 포함할 행이 필요한 경우 *Salloon Soccer일치하는 표현식은 간단합니다 /^product: .*Salloon Soccer.*/.

sed 's/^product: .*Salloon Soccer.*/&\nvenue: indoor/' file.txt

바라보다 man sed.

관련 정보