2013-10-25 27 views
19

Mac OSX numaralı belgede tek bir sed bildirimi kullanarak çoklu bulma/değiştirme işlemlerini nasıl yapabileceğimi merak ediyorum. Bunu Ubuntu içinde yapıyorum ama OSXBSD doğası nedeniyle, komut biraz değiştirilmelidir.Tek bir sed komutuyla birden fazla yedek

Yani, dizesiyle dosya verildi:

"Red Blue Red Blue Black Blue Red Blue Red" 

Ben çıktı sonuçlanan bir sed ifadeyi çalıştırmak istiyorum:

"Green Yellow Green Yellow Black Yellow Green Yellow Green" 

İki sed ifadeleri bir eleme ile 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 {} \; 

Birkaç noktalı virgül ve eğik çizgi kombinasyonu denedim ve baktım Apple's Dev man page for sed numaralı telefondan ancak örnek yokluğunda birlikte parçalayamadım.

+0

[2 sed komutunun birleştirilmesi] nin olası kopyası (http://stackoverflow.com/questions/7657647/combining-2-sed-commands) – tripleee

cevap

20

Apple'ın adam sayfası, diyor. -e veya -f seçeneklerini kullanarak birden çok komut belirtilebilir. yüzden Bu kesinlikle Linux ve Unix'lerde çalışır

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

söyleyebilirim.

+0

Harika, teşekkürler. Çıkıyor aslında yanlış dizine çıktı, ama bu çalışmaları doğrulayabilirim. – user1026361

9

Ayrıca noktalı virgül ; kullanılarak sed komutları birleştirmek mümkün olmalıdır: Bunun ne taşınabilir merak ve the POSIX specification of sed için this Stackoverflow answer aracılığıyla bir bağlantı bulunmuştur

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

. Özellikle çalıştırmak için çok fazla sed komutunuz varsa, bu bana birden fazla sed ifadesi yazmaktan daha az karmaşık görünüyor.

İlgili konular