Si ejecuto el comando cat file | grep pattern
, obtengo muchas líneas de salida. ¿Cómo se concatenan todas las líneas en una línea, reemplazando efectivamente cada una "\n"
con "\" "
(termina con "
seguido de espacio)?
cat file | grep pattern | xargs sed s/\n/ /g
no funciona para mi
sed
script entre comillas simples para que Bash no se meta con él (ya quesed s/\n/ /g
llamased
con dos argumentos, a saber,s/n/
y/g
); (2) ya que desea que la salida decat file | grep pattern
ser la entrada ased
, no los argumentos ased
, es necesario eliminarxargs
; y (3) no es necesariocat
aquí, ya quegrep
puede tomar un nombre de archivo como segundo argumento. Entonces, deberías haberlo intentadogrep pattern file | sed 's/\n/ /g'
. (En este caso no habría funcionado, por las razones dadas en el enlace de arriba, pero ahora ya sabes para el futuro.)Respuestas:
Use
tr '\n' ' '
para traducir todos los caracteres de nueva línea a espacios:Nota:
grep
lee archivos,cat
concatena archivos. No hacerlocat file | grep
!Editar:
tr
solo puede manejar traducciones de un solo carácter. Puede usarawk
para cambiar el separador de registro de salida como:Esto transformaría:
a:
fuente
echo ""
al final para agregar una nueva línea antes del texto de solicitud."
, aparece comoone" two" three"
, sin embargo, me gustaría que aparezca comoone" two" three
. Tenga en cuenta que los últimos tres no tienen paréntesis. ¿Algunas ideas?sed '$s/..$//'
para eliminar los últimos 2 caracteres en la última línea.--delete
opción ya que el valor predeterminado espera dos argumentos. por ejtr --delete '\n'
.La salida de tubería a
xargs
concatenará cada línea de salida en una sola línea con espacios:O cualquier comando, por ejemplo.
ls | xargs
. El límite predeterminado dexargs
salida es ~ 4096 caracteres, pero se puede aumentar con, por ejemplo,.xargs -s 8192
.grep xargs
fuente
| tr '\n' ' '
no funcionaba para mí cuando se llamaba a través de laphp exec
función. Estaba ignorando tr, y solo daba el último partido de grep.| xargs
trabajó.En bash
echo
sin comillas, elimine retornos de carro, pestañas y espacios múltiplesfuente
IFS="$(printf '\n\t')"
echo $(<file)
... usar echo no solo es más ordenado que usartr '\n' ' '
, sino también mejor (piense en las\r\n
terminaciones de línea). @aggsol, puedes decirIFS=$'\n\t'
Esto podría ser lo que quieras
En cuanto a su edición, no estoy seguro de lo que significa, ¿tal vez esto?
(esto supone que
~
no ocurre enfile
)fuente
cat file
realmente serácat
, o incluso un archivo. (Acabo de dejar esa parte sin cambios ya que era irrelevante para la pregunta)Este es un ejemplo que produce resultados separados por comas. Puede reemplazar la coma por cualquier separador que necesite.
produce:
fuente
Aquí está el método que usa el
ex
editor (parte de Vim ):J oin todas las líneas y p rint a la salida estándar:
J oin todas las líneas en el lugar (en el archivo):
Nota: ¡Esto concatenará todas las líneas dentro del archivo!
fuente
Las formas más rápidas y fáciles que conozco para resolver este problema:
Cuando queremos reemplazar el nuevo carácter de línea
\n
con el espacio :xargs
tiene sus propios límites en la cantidad de caracteres por línea y la cantidad de todos los caracteres combinados, pero podemos aumentarlos. Los detalles se pueden encontrar ejecutando este comando:xargs --show-limits
y, por supuesto, en el manual:man xargs
Cuando queremos reemplazar un personaje con otro exactamente un personaje :
Cuando queremos reemplazar un personaje con muchos personajes :
Primero, reemplazamos los caracteres de nueva línea
\n
por tildes~
(o elegimos otro carácter único que no esté presente en el texto), y luego reemplazamos los caracteres de tilde con cualquier otro carácter (many_characters
) y lo hacemos para cada tilde (banderag
).fuente
Probablemente la mejor manera de hacerlo es usar la herramienta 'awk' que generará resultados en una línea
Fusionará todas las líneas en una con delimitador de espacio
fuente
{print}
ya que es la acción predeterminada de awk.Aquí hay otro método simple usando
awk
:Además, si su archivo tiene columnas, esto proporciona una manera fácil de concatenar solo ciertas columnas:
fuente
En Red Hat Linux solo uso echo:
echo $ (cat / some / file / name)
Esto me da todos los registros de un archivo en una sola línea.
fuente