Buscar este blog

Aviso

El autor de éste blog no se hace responsable de los posibles daños o perdidas de información, que pudieran ocasionarse en su sistema o su vida por la aplicación de la información aquí contenida.

viernes, 28 de septiembre de 2018

Regex to identify each group of?

https://regex101.com/r/8Fq0qa/1

// https://stackoverflow.com/questions/14751802/split-string-every-3-characters-from-back-using-javascript
// https://stackoverflow.com/questions/469913/regular-expressions-is-there-an-and-operator
const replace = value.replace( /(?=(?:........)*$)(?=\.)./g, millions);

(?=(?:.{8})*$)(?=\.).

lunes, 24 de septiembre de 2018

Cambiar el contenido de un archivo con expresiones regulares

Muchas veces el uso de expresiones regulares confunde no tanto por su sintaxis, si no como esta se usa embebida en otros programas, uno de estos ejemplos es el comando SED, que posee un "flag"/opción especialmente diseñada para eso. Por ejemplo, podía usar una operación binaria OR para coincidir cualquier conjunto de caracteres y reemplazarlos por uno único.

$ cat foobar 
http://colombia.com
http://gmail.com/
http://www.glud.co

Ejemplo 1: Reemplazar los dominios .com y .co por .gov

$ sed -E 's#(.com|.co)#.gov#g' foobar
http:/.govlombia.gov
http://gmail.gov/
http://www.glud.gov

Ejemplo 2: Reemplazar solamente los dominios que terminan por ".com" o ".com/" por ".gov"

$ sed -E 's#(.com|.com/)$#\.gov#g' foobar
http://colombia.gov
http://gmail.gov
http://www.glud.co


Ejemplo 3: Reemplazar solamente los dominios que terminan por ".com" o ".com/" por ".gov" y ".gov/" respectivamente.
Este incluye que primero evalúa la condición de terminar con ".com" o ".com/" y luego hace un simple reemplazo global de ".com" por ".gov".
$ sed -E '/(.com|.com\/)$/s/.com/.gov/g' foobar 
http://colombia.com
http://gmail.com/
http://www.glud.co

Ejemplo 4: Lo mismo de arriba pero con muchas expresiones seguidas.
$ sed -E '/(.com|.com\/)$/s/.com/.gov/g;/(.gov|.gov\/)$/s/http/https/g' foobar
https://colombia.gov
https://gmail.gov/
http://www.glud.co
Ten en cuenta que para la segunda validación no se puede usar "/(.com|.com\/)$/s/http/https/g", porque en ese punto ".com" ya fue reemplazado por ".gov".

O
$ sed -E -e '/(.com|.com\/)$/s/.com/.gov/g' -e '/(.gov|.gov\/)$/s/http/https/g' foobar
https://colombia.gov
https://gmail.gov/
http://www.glud.co

O

$ sed -Ee '/(.com|.com\/)$/s/.com/.gov/g' -Ee '/(.gov|.gov\/)$/s/http/https/g'
https://colombia.gov
https://gmail.gov/
http://www.glud.co

Referencias:

- https://linuxconfig.org/how-to-substitute-only-a-first-match-occurrence-using-sed-command
- https://www.linuxtopia.org/online_books/linux_tool_guides/the_sed_faq/sedfaq4_004.html
- https://www.gnu.org/software/sed/manual/html_node/Regular-Expressions.html
- https://unix.stackexchange.com/questions/155805/sed-replace-first-k-instances-of-a-word-in-the-file
- https://www.tutorialspoint.com/unix/unix-regular-expressions.htm

Cambiar extensión a ficheros con BASH

En este caso se cambia la extensión .txt a .csv, ten cuidado al reemplazar. Verifica primero con:

find . -iname "*.txt" -exec sh -c 'echo mv {} "$(dirname {})/$(basename {} .txt).csv"' \;

Y luego con:
find . -iname "*.txt" -exec sh -c 'mv {} "$(dirname {})/$(basename {} .txt).csv"' \;

Más populares

Archivo del blog