2012-05-07 14 views
7

Lo sto cercando su Google. Voglio solo che questa riga:Bash: Come posso sostituire una stringa con una nuova riga in osx bash?

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | sed -e 's/<newLine>/\n/g' 

funziona nel mio terminale osx e nel mio script bash. Non posso usare sed per questo? C'è un'altra soluzione a una linea?

+0

fa OS X 'sed' sostenere questo:' sed 's//\ O12/g''? Questa è la lettera "o" piuttosto che uno zero. Il valore ottale per una nuova riga è 12. Funziona su Linux (ma anche su '\ n'). –

+0

@DennisWilliamson non funziona nella mia bash :) – Rodrigo

+0

lol, quindi non funziona con il mio OS X 'sed' :) – Rodrigo

risposta

4

Utilizzando bash solo:

STR="Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" 
$ echo ${STR//<newLine>/\\n} 
Replace \n it by \n NEWLINE \n in my OSX terminal \n and bash script 

$ echo -e ${STR//<newLine>/\\n} 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 

Una spiegazione veloce qui - la sintassi è simile a quella della sintassi sostituto di sed, ma si utilizza una doppia barra (//) per indicare sostituendo tutte le istanze della stringa. Altrimenti, viene sostituita solo la prima occorrenza della stringa.

1

Questo potrebbe funzionare per voi:

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | 
sed 'G;:a;s/<newLine>\(.*\(.\)\)$/\2\1/;ta;s/.$//' 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 

EDIT: OSX non accetta più comandi vedi here

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | 
sed -e 'G' -e ':a' -e 's/<newLine>\(.*\(.\)\)$/\2\1/' -e 'ta' -e 's/.$//' 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 

Ancora un altro modo:

echo "Replace <newLine> it by <newLine> NEWLINE <newLine> in my OSX terminal <newLine> and bash script" | 
sed $'s|<newLine>|\\\n|g' 
Replace 
it by 
NEWLINE 
in my OSX terminal 
and bash script 
+0

lol, mi spiace, questo non funziona in OSH bash. – Rodrigo

+0

@Rodrigo grazie per la risposta, sembra che OSX non accetti più comandi come GNU sed. La modifica dovrebbe renderlo conforme a OSX. – potong

Problemi correlati