2016-04-13 18 views
0

sapces değiştirmeye çalışırken veboşlukları ve parantezleri bir dizgede değiştirir + sed + bundan daha iyi bir yol var mı?

this is just a (test) içinde altını ben aşağıdakileri yapın:

echo "this is just a (test)" | sed -e 's/ /_/g' | sed -e 's/(//g' | sed -e 's/)//g' 

Ve bu bana verir:

this_is_just_a_test 

daha iyi bir yolu var mı? Sed'de yazmanın daha kısa yolu?

+2

En azından "-e" ifadelerini tek bir "sed" çağrısında birleştirebilirsiniz: sed -e 's// _/g' -e '/ (// g' -e 's /) // g '' veya daha kısa: 'sed -e// _/g '-e'/[()] // g '. Karakterleri yerine 'tr 'ile değiştirebilirsiniz. 'tr', belirli karakterleri kesmek için de (ikinci bir çağrıda) kullanılabilir. Ama bütün bunların hepsi çok yardımcı olmaz, ben de (tek) 'sed' çağrısına sadık kalırdım. – Alfe

+1

Birden çok "sed" komutunu bir ';' kullanarak zincirleyebilirsiniz. Yani belki de 'sed'// _/g; s/[()] // g 'noktanın daha fazlasıdır. – jeberle

cevap

1

Sen tr kullanarak aynı şeyi elde edebilirsiniz:

echo "this is just a (test)" | tr \ _ | tr -d \(\) 

ilk tr alt çizgilerle boşluk değiştirir ve ikinci bir bütün parantez siler.

İlgili konular