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.
Usando Bash Parameter Expansion :
orig="AxxBCyyyDEFzzLMN"
mod=${orig//[xyz]/_}
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