내 폴더에 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
이렇게 하면 최상위 필드에 문자열이 포함된 모든 파일에 값이 있는 필드가 추가됩니다 . 이 옵션 덕분에 변경 사항이 즉시 적용됩니다.indoor
product
Salloon Soccer
-i
답변2
당신이 해야 할 일은 표현식에 일치시키려는 내용을 포함시키는 것뿐입니다. product
문자열을 포함할 행이 필요한 경우 *Salloon Soccer
일치하는 표현식은 간단합니다 /^product: .*Salloon Soccer.*/
.
sed 's/^product: .*Salloon Soccer.*/&\nvenue: indoor/' file.txt
바라보다 man sed
.