GNU/Linux >> Tutoriales Linux >  >> Linux

Eliminación de comillas simples y dobles en una cadena usando solo comandos bash / Linux estándar

Esto debería hacerlo:

sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt

Donde in.txt es:

"Fo'od'
'Food'
"Food"
"Fo"od'
Food
'Food"
"Food'
'Fo'od'
"Fo'od"
Fo'od
'Fo"od'
"Fo"od"
Fo"od

Y esperado.txt es:

"Fo'od'
Food
Food
"Fo"od'
Food
'Food"
"Food'
Fo'od
Fo'od
Fo'od
Fo"od
Fo"od
Fo"od

Puede comprobar que coinciden con:

diff -s <(sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt) expected.txt

Podrías usar tr :

echo "$string" | tr -d 'chars to delete' 

... también funciona, sin embargo, se sabe que 'tr' es problemático en distribuciones mucho más antiguas (alrededor de Redhat 9-ish). tr es una abreviatura de 'traducir', comúnmente utilizada en tuberías para transformar la entrada. El -d opción simplemente significa 'eliminar'.

La mayoría de las versiones modernas también contienen macros predefinidas para transformar de arriba a abajo, de abajo a arriba, eliminar espacios en blanco, etc. Por lo tanto, si lo usa, tómese un segundo para ver qué más hace (consulte la salida de ayuda / página de manual), viene muy bien.


VAR="'FOOD'"

VAR=$(eval echo $VAR)

Explicación:Dado que el shell ya entiende las comillas, puede pedirle al shell que evalúe un comando que solo repita la cadena entre comillas, de la misma manera que lo hace cuando lo escribe usted mismo.

Aquí, eval echo $VAR se expande a eval echo 'FOOD' porque las comillas son en realidad parte del valor de VAR . Si tuviera que ejecutar echo 'FOOD' en el shell obtendrías FOOD (sin las comillas). Eso es lo que eval hace:toma su entrada y la ejecuta como un comando de shell.

⚠¡INYECCIÓN DE CÓDIGO!

eval exponga los scripts a la inyección de código.

VAR=';ls -l'

VAR=$(eval echo $VAR)

provocará la ejecución de ls -l .

Aquí se podrían inyectar códigos mucho más dañinos.


Linux
  1. Comandos de Linux:trabajos, bg y fg

  2. ¿Envolviendo un comando que incluye comillas simples y dobles para otro comando?

  3. Usando el comando de suspensión de Linux en Bash Scripts

  4. Cómo establecer la prioridad del proceso de Linux usando los comandos nice y renice

  5. comando bash alias con comillas simples y dobles

Cómo grabar y reproducir sesiones de terminal de Linux usando los comandos 'script' y 'scriptreplay'

Cómo ejecutar comandos desde la entrada estándar usando Tee y Xargs en Linux

Cómo usar bash if -z y if -n para probar cadenas en Linux

Busque, estudie y practique los comandos de Linux sobre la marcha usando Tldr++

Linux:¿directorios estándar y/o comunes en sistemas operativos Unix/linux?

Diferencia entre comillas simples y dobles en Bash Shell