He estado usando seddurante bastante tiempo, pero aquí hay una peculiaridad que encontré, que no puedo resolver.
Déjame explicarte mi problema con el caso real.
Escena 1
printf "ls" | xclip -selection clipboard
echo "ls" | xclip -selection clipboard
En el primer comando, canalizo la printfsalida a xclippara que se copie en el portapapeles. Ahora, a printfdiferencia echo, no inserta una nueva línea al final de forma predeterminada. Entonces, si pego este contenido en la terminal, el lscomando que se copia no se ejecuta automáticamente.
En el segundo, hay una nueva línea al final, por lo que al pegar el contenido del portapapeles también se ejecuta el comando en el portapapeles.
Esto no es deseable para mí. Entonces, quería eliminar la nueva línea usando sed, pero falló, como se explica en la escena a continuación.
Escena # 2
echo "ls" | sed -r 's/\n//g' | xclip -selection clipboard
El contenido en el portapapeles todavía contiene nueva línea. Cuando lo pego en la terminal, el comando se ejecuta automáticamente.
También intenté eliminar el carácter de retorno de carro \r. Pero nada Parece que me estoy perdiendo algo muy crucial / básico aquí.

generate-text | xclipcaso. Esta respuesta solo elimina la última línea nueva.Muchas herramientas de procesamiento de texto, incluido sed, operan en el contenido de la línea, excluyendo el carácter de nueva línea. Lo primero que hace sed al procesar una línea es quitar la nueva línea al final, luego ejecuta los comandos en el script y agrega una nueva línea final al imprimir. Por lo tanto, no podrá eliminar la nueva línea con sed.
Para eliminar todas las nuevas líneas, puede usar
tren su lugar:fuente
Puede reemplazar las nuevas líneas en sed pasándole la opción -z .
Página del manual de Sed:
fuente
| xclipcaso.Si solo está poniendo comandos en el portapapeles
Si además necesita realizar transformaciones más complejas,
fuente
perlypythonson mucho más lentos de lo quesedpueden ser cuando se usan correctamente. Sin embargo, aprender a usarlo correctamente es la clave.sedpuede hacer mucho más que manejar solo sus frases ingeniosas , y probablemente puede hacerlo más rápido que cualquiera de esas otras herramientas que menciona.Para eliminar solo la última línea nueva , pase por:
sedno agregará a\0al final de la secuencia si el delimitador se establece enNULvia-z, mientras que para crear un archivo de texto POSIX (definido para terminar en a\n), siempre generará un final\nsin-z.P.ej:
Y para probar no
NULañadido:Para eliminar varias líneas nuevas finales , canalice a través de:
fuente