2012-05-07 14 views
7

Lo estoy buscando en Google mucho. Solo quiero que esta línea:Bash: ¿Cómo puedo reemplazar una cadena por una nueva línea en osx bash?

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

funciona en mi terminal osx y en mi secuencia de comandos bash. No puedo usar sed para esto? ¿Hay otra solución de una línea?

+0

¿El OS X 'sed' apoyar esto:' sed 's//\ O12/g''? Esa es la letra "o" en lugar de un cero. El valor octal para una nueva línea es 12. Funciona en Linux (pero también lo hace '\ n'). –

+0

@DennisWilliamson no funciona en mi bash :) – Rodrigo

+0

lol, por lo que no funciona con mi OS X 'sed' :) – Rodrigo

Respuesta

4

Usando sólo bash:

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 explicación rápida aquí - la sintaxis es similar a la sintaxis de sustitución de sed, pero se utiliza una barra doble (//) para indicar la sustitución de todas las instancias de la cadena. De lo contrario, solo se reemplaza la primera aparición de la cadena.

1

Esto podría funcionar para usted:

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 no acepta varios comandos ver 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 

embargo, otra forma:

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

jajaja, lo siento, esto no funciona en OSX bash. – Rodrigo

+0

@Rodrigo gracias por su respuesta, parece que OSX no acepta múltiples comandos como GNU sed. La edición debe hacer que sea compatible con OSX. – potong

Cuestiones relacionadas