2009-09-14 10 views
13

Selamlar, nasıl BSD'de aşağıdaki sed performans gösterir? insan sayfadanBSD sed uygulamasında yeni hat değiştirme nasıl kullanılır?

sed 's/ /\n/g' 

o \ N bu davranıştan kaçınmak, nasıl bir yedek dize içinde anlamıyla ele alınacaktır belirtiyor? Alternatif var mı?

Mac OS Snow Leopard kullanıyorum, GNU sed almak için fink kurabilirim.

bir kabuk içinde
+1

Küçük düzeltme: '\ n' tam anlamıyla davranılmadığı için, literal' n'ye çevrilir (yani '\' bırakılır; ancak bu, açıkça istenen sonuç değildir). – mklement0

cevap

14

, yapabileceğiniz:

sed 's/ /\ 
/g' 

bir yeni satır eklemek için ters eğik çizgiden sonra anahtarı girin isabet.

+0

Fantastik, teşekkürler Wooble. BSD sed'ün yedek dizgede niçin desteklemediğinin bilinen bir nedeni var mı? Sadece merak. –

+0

Emin değilim, ama sadece yedek dizede kaçmayı desteklememeye karar vermiş görünüyorlar. sed 'y// \ n /' yalnızca dize değiştirme yapar rağmen, iş gibi görünüyor; '' bir regex ile değiştirmeniz gerekirse başarısız olur. Ayrıca, \ n özel kasalı görünüyor; ile bir 'r' olsun, bir taşıma dönüşü değil. – geoffspear

6

bir başka yolu:

sed -e 's/ /\'$'\n/g' 

here bakınız.

+2

+1, ancak bunun bir kabuk özelliğine [ANSI C alıntı] (http://www.gnu.org/software/bash/manual/bash.html#ANSI_002dC-Quoting) ('$ ') dayanacağını unutmayın. . ') ve bazı kabuklar desteklemiyor (örneğin,' tire '- POSIX'in bir parçası değil). Ayrıca, ' 'ın// \' $ '\ n' '/ g'' - bir' $' \ n'' iki tek tırnakla arasındaki wedging - kavramsal olarak daha net ve daha sağlamdır. Alternatif olarak, '$' s// \\\ n/g 'seçeneğini kullanın. – mklement0

4

Kullanım kolaylığı açısından, ben şahsen sıklıkla

cr="\n" 
# or (depending version and OS) 
cr=" 
" 

sed "s/ /\\${cr}/g" 

yüzden 1 satırda kalır kullanın.

+1

İlginç; 'cr' yerine 'nl' değişkenini çağırmayı önerebilir miyim? [ANSI C alıntı] destekleyen bir kabuk kullandığınızı varsayalım (http://www.gnu.org/software/bash/manual/bash.html#ANSI_002dC-Quoting) (örn., Bash', 'ksh',' zsh '), atamayı 'cr = $' \ n'' olarak basitleştirebilirsiniz; o zaman platform farklılıkları hakkında endişelenmenize gerek kalmayacaktı. – mklement0

+0

Serin tavsiye, herhangi bir "unix" üzerinde "$ '\ n" hakkında sur mu? Eğer doğru _shell_ ('bash' varsa) gerçekten işe yarayacak (Sunum bana \ n' ile – NeronLeVelu

+1

' $ '\ n'' (ANSI-C alıntılama) gibi atama/eylemde biraz sorun verebilir. 'ksh', ya da' zsh' - POSIX-özelliklerinde değil, sadece 'dash' gibi kabuklar gibi), platformun önemi yok. (- ksh' 'emin ve' zsh' değil ama son yeterince sürümleri için mevcut sistemlerin beklenebilir 'bash' sürüm 2.0 özelliği (önce çoooook süre) tanıtıldı). – mklement0

İlgili konular