내 파일에는 다음이 포함됩니다.
파인애플 사과 바나나 쌀 포도 수박 주황색 사과 바나나 쌀 망고 배 자두 바나나 쌀 체리
나는 이것을 다음과 같이 만들고 싶다 :
파인애플 사과 바나나 쌀 포도 수박 주황색 사과 바나나 올리브 망고 배 자두 바나나 쌀 체리
여기서는 "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'
입력의 모든 공백 문자를 줄 바꿈으로 변환하여 한 줄 입력을 한 줄에 한 단어씩 원래 형식으로 다시 변환합니다.