텍스트 파일의 한 줄을 바꾸지만, 해당 줄 앞에 특정 여러 줄 패턴이 있는 경우에만 해당됩니다.

텍스트 파일의 한 줄을 바꾸지만, 해당 줄 앞에 특정 여러 줄 패턴이 있는 경우에만 해당됩니다.

내 파일에는 다음이 포함됩니다.

파인애플
사과
바나나
포도
수박
주황색
사과
바나나
망고
자두
바나나
체리

나는 이것을 다음과 같이 만들고 싶다 :

파인애플
사과
바나나
포도
수박
주황색
사과
바나나
올리브
망고
자두
바나나
체리

여기서는 "Rice"를 "Olive"로 변경하겠습니다. 하지만 "Rice"가 여러 줄 패턴을 따르는 경우에만 특히 "Rice"가 여러 줄 패턴 뒤에 나타나는 경우에만 해당됩니다.

주황색
사과
바나나

awk, perl, sed또는 기타 도구를 사용할 의향이 있습니다 .

답변1

Perl은 이 작업을 매우 잘 수행합니다.

perl -0pe 's/Orange\nApple\nBanana\n\KRice/Olive/' input.txt

정규식을 연습하고 테스트할 수 있습니다.정규 표현식 101.

답변2

가능한 해결책 중 하나:

paste -d' ' -s myfile \
 | sed 's/\(Orange Apple Banana\) Rice/\1 Olive/g' \
 | tr ' ' '\n'

설명하다:

paste -d' ' -s myfile각 행을 가져 가라.내 파일구분 기호(공백)로 구분하여 연속적으로(즉, 한 줄에) 붙여넣습니다. 이제 한 줄에 한 단어를 입력하는 대신 한 줄에 모든 단어를 입력할 수 있습니다.

sed 's/\(Orange Apple Banana\) Rice/\1 Olive/g'입력을 검색하고 "오렌지 사과 바나나 쌀"이 나올 때마다 "오렌지 사과 바나나 올리브"로 바꿉니다.

tr ' ' '\n'입력의 모든 공백 문자를 줄 바꿈으로 변환하여 한 줄 입력을 한 줄에 한 단어씩 원래 형식으로 다시 변환합니다.

관련 정보