2013-10-25 2 views
19

단일 명령을 사용하여 여러 찾기/바꾸기를 수행하는 방법이 궁금합니다 (Mac OSX). Ubuntu에서이 작업을 수행 할 수 있지만 BSD 특성이 OSX이므로 약간 명령을 변경해야합니다.하나의 sed 명령으로 여러번 바꾸기

그래서 문자열을 가진 파일 제공 :

"Red Blue Red Blue Black Blue Red Blue Red" 

내가 출력 결과 상위 나오지 문 실행하려면 :

"Green Yellow Green Yellow Black Yellow Green Yellow Green" 

내 두 나오지 문 자격과를 find

color1="Green" 
color2="Yellow" 
find . -type f -exec sed -i '' s/Red/$color1/g {} \; 
find . -type f -exec sed -i '' s/Blue/$color2/g {} \; 

세미콜론과 슬래시 조합을 여러 번 시도해 보았습니다. Apple's Dev man page for sed에 있지만 예제가 부족하여 함께 조각을 낼 수 없었습니다.

+0

[2 개의 sed 명령 결합] 가능한 복제본 (http://stackoverflow.com/questions/7657647/combining-2-sed-commands) – tripleee

답변

20

Apple 설명서 페이지에 이 표시됩니다. -e 또는 -f 옵션을 사용하여 여러 명령을 지정할 수 있습니다. 그래서 나는이 확실히 리눅스와 유닉스에서 작동

find . -type f -exec sed -i '' -e s/Red/$color1/g -e s/Blue/$color2/g {} \; 

을 말할 것입니다.

+0

감사합니다. 내가 실제로 잘못된 디렉토리로 출력하고있는 것으로 밝혀졌지만, 나는 이것이 작동하는지 확인할 수있다. – user1026361

9

또한 세미콜론 ;를 사용 sed 명령을 결합 할 수 있어야한다 :이 얼마나 휴대용 궁금 the POSIX specification of sedthis Stackoverflow answer를 통해 링크를 발견

find . -type f -exec sed -i '' -e "s/Red/$color1/g; s/Blue/$color2/g" {} \; 

합니다. 특히 실행할 sed 명령이 많은 경우에는 복수 sed 식을 작성하는 것보다 나에게 덜 혼란스러워 보입니다.

관련 문제