¿Cómo uso el command tr para replace: paradas completas, exclamaciones y signos de interrogación seguidos de un espacio, con nuevas líneas?

Tengo un text que dice así:

I am happy. I am here. How are you, Meg? 

Quiero que esto sea:

 I am happy. I am here. How are you, Meg? 

Para las paradas completas probé

 tr -s '. ' '\n' <file.txt >out.txt 

Pero no está funcionando.

Por lo que sé, tr solo funciona con caracteres únicos y "." Es una cadena, no un carácter, por lo que es posible hacer lo que quieras utilizando sed o awk , por ejemplo:

 sed -e "s/\. /\n/g" file.txt > out.txt 

Tu no tr no está diseñado para eso. Está diseñado para transcribir un set de caracteres individuales en otro set de caracteres individuales , por ejemplo, AZ en az . El uso de tr con .␣ (un punto y un espacio) y \n replaceá todos los puntos y espacios por líneas nuevas.

Use (GNU) sed lugar:

 $ echo 'I am happy. I am here. How are you, Meg?' | sed 's/\([!.?]\) /\1\n/g' I am happy. I am here. How are you, Meg? 

La secuencia de commands de edición sed aquí replaceá todas las apariciones de ! , o ? que son seguidos por un espacio, por el mismo personaje y una nueva línea.

Como se ha mencionado, no puede lograr lo que quiere con tr debido a la naturaleza de tr . Pero hay muchas otras alternativas. Por ejemplo, Python 2.

Como una línea, podríamos hacer esto:

 python -c "import sys;print '\n'.join([ j.strip() for l in sys.stdin.readlines() for j in l.rstrip().split('.')])" < input.txt 

Como script, sería así:

 #!/usr/bin/env python import sys sentences = [] for line in sys.stdin: for sentence in line.rstrip().split('.'): sentences.append(sentence.strip()) print "\n".join(sentences) 

Y usado como tal:

 $ ./split_to_lines.py < input.txt I am happy I am here How are you, Meg? 

Aquí no ocurre nada particularmente complejo, simplemente estamos dividiendo todas las líneas del file en oraciones en . y luego elimina el espacio inicial y final de cada oración. Todo eso entra en una list, que luego se .join() ensamblar a través de la function .join() .