¿Existe algún método para imprimir la salida de varias líneas (salida única) en la misma línea?
Por ejemplo, si la salida es:
abc
def
qwerty
¿Es posible imprimir:
abcdefqwerty
command-line
scripts
text-processing
Shrinidhi Kulkarni
fuente
fuente
printf
+cat
+perl
se maneja mucho mejor a través deperl -pe 's/\n//;END{printf "\n"}' input.txt
un proceso único, sin sustitución de comandos y jugando con comillas, y sin UUOC. Quizás.Puede canalizar su salida multilínea a través de
awk
o usar
sed
:Ejecución de ejemplo
Lectura adicional: elimine el salto de línea con AWK · serverfault.SE
fuente
También
your_command | paste -sd ''
que conserva la nueva línea final.fuente
Si desea usar Perl para esto, puede usar su
chomp
función:Algunos detalles más, para aquellos que estén interesados.
Puede pasar uno o más nombres de archivo como argumentos posteriores.
En algunos casos, es posible que no desee hacer eso , pero puede canalizar o redirigir a ese comando en su lugar. (Estas habilidades, y esa advertencia, también se aplican a cualquier otra solución
perl -p
operl -n
base).Entonces, si desea procesar la salida de la ejecución
some-command
:Esto es potencialmente más rápido que el comando Perl en la respuesta de terdon . Los caracteres de nueva línea (representados por
\n
) solo aparecen al final de las líneas en esta situación, porque son lo que Perl está usando para decidir dónde termina cada línea.s/\n//
busca en toda la línea nuevas líneas, mientraschomp
solo elimina la que está al final (si la hay, ya que la última línea podría o no tener una).El rendimiento podría no ser realmente la razón principal para preferir
chomp
. Elperl
comando en la respuesta de terdon solo sería un poco más lento a menos que esté procesando un archivo enorme con líneas muy largas. Y si necesita velocidad, el camino de David Foerster probablemente sea aún más rápido.chomp
es, sin embargo, exactamente la herramienta adecuada para esto si está usando Perl, y creo que la intenciónchomp
es más clara que la des/\n//
. En última instancia, probablemente no haya una respuesta objetiva sobre cuál es mejor.Imprimir una nueva línea final.
Sin embargo, recomiendo no usar el comando substitution (
$(
)
) solo para asegurar que se imprima una nueva línea final. A menos que el texto que está procesando sea corto, es probable que sea bastante lento: tiene que recopilar todo el texto a la vez y luego imprimirlo, y hace que su comando sea más difícil de entender. En cambio, puedes hacer lo que David Foerster sugirió y correrecho
oprintf '\n'
después.Si está canalizando desde o (como muestra David Foerster) redirigiendo desde ese comando, puede encerrarlo
{
;}
para que la salida de ambos comandos se tome en conjunto. Si solo lo está imprimiendo en el terminal, puede ejecutarlo exactamente como se muestra arriba. Esto funciona incluso si está canalizando o redirigiendo al comando, porqueecho
/ enprintf '\n'
realidad no lee ninguna entrada. Es decir, esto funciona:Si bien aquí no puede simplemente eliminar el
{
;}
:O, si lo prefiere, puede
perl
imprimir la nueva línea final. Al igual que encerrando los comandosperl
y , este enfoque funciona incluso si está canalizando o redirigiendo desde él (y, como todos los enfoques, esto también funciona cuando está canalizando hacia él):echo
{
;}
Tenga en cuenta que el comando en la respuesta de terdon también funciona bien con estos métodos de impresión de la nueva línea final. Por ejemplo:
fuente
perl -wpe 'chomp; END { print "\n" }
es el mismo proceso, una ventaja menor sobre la adición de eco finalUsando la forma solo de shell:
fuente
Esta respuesta tiene una solución al problema que está intentando crear: ¿por qué bash elimina \ n en $ (archivo cat)?
Si escribe
cat myfile.txt
, verá:Pero si escribes
echo $(cat myfile.txt)
verás:Tenga en cuenta que este método inserta un espacio donde solían estar las nuevas líneas separadas. Esto hace que la salida sea más fácil de leer pero no se adhiere estrictamente al alcance de su pregunta.
fuente
Si está utilizando Bash, puede hacerlo sin ninguna herramienta externa.
Resultado:
El primer comando convierte la salida de varias líneas en una matriz, el segundo comando expande la matriz en múltiples argumentos en una línea.
fuente