una sustituir script reemplazar manejo linea insertar especiales eliminar caracteres caracter cadenas cadena linux string bash unix replace

linux - sustituir - Reemplazar algunos caracteres en una cadena con otro carácter



sed reemplazar/ (5)

Aquí hay una solución con expansión de parámetros de shell que reemplaza múltiples ocurrencias contiguas con una sola _ :

$ var=AxxBCyyyDEFzzLMN $ echo "${var//+([xyz])/_}" A_BC_DEF_LMN

Observe que el +( pattern ) requiere una coincidencia de patrón extendida, activado con

shopt -s extglob

Alternativamente, con la opción -s ("squeeze") de tr :

$ tr -s xyz _ <<< "$var" A_BC_DEF_LMN

Tengo una cuerda como

AxxBCyyyDEFzzLMN

Quiero reemplazar todas las x y y y la z con _ para que la salida sea

A_BC_DEF_LMN

¿Como hacer eso?

Conozco una serie de

echo "$string" | tr ''x'' ''_'' | tr ''y'' ''_''

Funcionará, pero quiero hacerlo de una sola vez, sin usar tuberías.

EDITAR: Los siguientes trabajaron

echo "$string" | tr ''[xyz]'' ''_''


Puede encontrar útil este enlace:

http://tldp.org/LDP/abs/html/string-manipulation.html

En general,

Para reemplazar la primera coincidencia de $ subcadena con $ reemplazo:

${string/substring/replacement}

Para reemplazar todas las coincidencias de $ subcadena con $ reemplazo:

${string//substring/replacement}

EDITAR: tenga en cuenta que esto se aplica a una variable llamada $ cadena.



echo "$string" | tr xyz _

reemplazaría cada aparición de x , y , o z con _ , dando A__BC___DEF__LMN en su ejemplo.

echo "$string" | sed -r ''s/[xyz]+/_/g''

reemplazaría las repeticiones de x , y , z con un solo _ , dando A_BC_DEF_LMN en su ejemplo.


read filename ; sed -i ''s/letter/newletter/g'' "$filename" #letter

^ Use tantos de estos como necesite, y puede hacer su propio cifrado BASIC