Estoy haciendo grep and sed y obtengo 2 líneas de un archivo que me interesa. ¿Cómo puedo obtener estas líneas en una sola línea que termine con el nuevo carácter de línea?
Ahora estoy obteniendo:
pattern1
pattern2
Me gustaría conseguir pattern1 pattern2 \n
printf %s\\n pattern1 pattern2 | sed '$!N;s/\n/ /'
Respuestas:
paste
:Eso dice: "lea una línea de stdin (la primera
-
), lea otra línea de stdin (la segunda-
), luego únalas con un espacio"una técnica específica de bash:
ref: http://www.gnu.org/software/bash/manual/bashref.html#index-mapfile
fuente
- -
? ¿Es el comando así?paste
cómo quiere que procese la entrada. 2 a la vez. Agregue más para hacer 3 a la vez.seq 10 | paste -d " " - -
.Pondré tres versiones diferentes métodos en una fila
AWK
SED
TR
Y hay muchos más.
fuente
tr
solución se tragará la nueva línea final, por lo que es posible que desee agregar; echo
a esapuede hacerlo usando el script de shell o en la línea de comandos, simplemente coloque la salida del comando en una variable y luego
echo
:fuente
*
o?
) en el resultado, los valores pueden cambiar.$()
través de printfprintf '%s\n' "$x"
printf '%s\n' "$x"
eso NO elimine la nueva línea "interna".Con
sed
, puedes hacer esto:N;
le dicesed
que agregue la siguiente línea en el espacio del patrón, por lo que ahorased
está trabajando con ambas líneas.s/\n/ /
reemplaza el carácter de nueva línea con un espacio, "fusionando" las dos líneas juntas.fuente
Una manera simple, salida de tubería a
xargs
:Esto solo funciona con una salida pequeña, porque está limitado por el máximo de caracteres por línea de comando. El valor más grande depende del sistema, puede obtener este valor utilizando
getconf ARG_MAX
.fuente
IFS estará encantado de comerlo si lo desea.
fuente
envuelva su sed / grep en backticks
cuando tu comando original era:
su nuevo comando sería:
No obtiene los espacios entre líneas, pero siempre puede agregar otro tubo de sed:
fuente