shell - reemplazar - Cómo agregar texto al final de cada línea en Unix
sed reemplazar/ (4)
Estoy haciendo ciertas operaciones de procesamiento de texto y finalmente puedo obtener un archivo como este
india
sudan
japan
france
ahora quiero agregar un comentario en el archivo anterior, como en el archivo final, debería ser algo así como
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
como un mismo comentario en todo el archivo. ¿Cómo hago esto?
Hay muchas maneras:
sed
: reemplaza $
(fin de línea) con el texto dado.
$ sed ''s/$/ | COUNTRY/'' file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
awk
: imprime la línea más el texto dado.
$ awk ''{print $0, "| COUNTRY"}'' file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
Finalmente, en pure bash
: lea línea por línea e imprímala junto con el texto dado. Tenga en cuenta que esto se desaconseja como se explica en ¿Por qué usar un bucle de shell para procesar texto se considera una mala práctica?
$ while IFS= read -r line; do echo "$line | COUNTRY"; done < file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
Otro awk
awk ''$0=$0" | COUNTRY"'' file
Para un enfoque más ofuscado:
yes ''| COUNTRY'' | sed $(wc -l < file)q | paste -d '' '' file -
También puede usar xargs
con echo
para esto:
xargs -d "/n" -rI % echo ''% | COUNTRY''
Esto hará que xargs
tome cada línea de entrada y la pase de a una por vez † al comando echo
especificado, reemplazando el %
(o el carácter que elijas) con la línea de entrada.
† De manera predeterminada, xargs
pasará varias líneas de entrada a un solo comando y las agregará a su lista de argumentos. Pero al especificar -I %
hace que xargs
coloque la entrada en el lugar especificado en el comando, y solo coloque una línea a la vez, ejecutando echo
tantas veces como sea necesario.