![텍스트 파일의 한 줄을 바꾸지만, 해당 줄 앞에 특정 여러 줄 패턴이 있는 경우에만 해당됩니다.](https://linux55.com/image/101908/%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%95%9C%20%EC%A4%84%EC%9D%84%20%EB%B0%94%EA%BE%B8%EC%A7%80%EB%A7%8C%2C%20%ED%95%B4%EB%8B%B9%20%EC%A4%84%20%EC%95%9E%EC%97%90%20%ED%8A%B9%EC%A0%95%20%EC%97%AC%EB%9F%AC%20%EC%A4%84%20%ED%8C%A8%ED%84%B4%EC%9D%B4%20%EC%9E%88%EB%8A%94%20%EA%B2%BD%EC%9A%B0%EC%97%90%EB%A7%8C%20%ED%95%B4%EB%8B%B9%EB%90%A9%EB%8B%88%EB%8B%A4..png)
내 파일에는 다음이 포함됩니다.
파인애플 사과 바나나 쌀 포도 수박 주황색 사과 바나나 쌀 망고 배 자두 바나나 쌀 체리
나는 이것을 다음과 같이 만들고 싶다 :
파인애플 사과 바나나 쌀 포도 수박 주황색 사과 바나나 올리브 망고 배 자두 바나나 쌀 체리
여기서는 "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'
입력의 모든 공백 문자를 줄 바꿈으로 변환하여 한 줄 입력을 한 줄에 한 단어씩 원래 형식으로 다시 변환합니다.