GNU/Linux >> Tutoriales Linux >  >> Linux

sustituir texto con igual longitud usando sed

Mi sospecha es que no puedes hacerlo en sed estándar , pero podría hacerlo con Perl u otra cosa con un manejo de expresiones regulares más potente.

$ echo "She sells sea shells by the sea shore" |
> perl -pe 's/(sh[a-z]*)/"." x length($1)/gei'
... sells sea ...... by the sea .....
$

El e modificador significa que el patrón de reemplazo es un script Perl ejecutable; en este caso repite el caracter . tantas veces como caracteres haya en el patrón coincidente. El g el modificador se repite a lo largo de la línea; el i El modificador es para coincidencias que no distinguen entre mayúsculas y minúsculas. Los -p opción de Perl imprime cada línea después del procesamiento en el script especificado por el -e option — el comando sustituto.


¿Este awk-oneliner hace el trabajo por ti?

awk '{for(i=1;i<=NF;i++)if($i~/^[Ss]h/)gsub(/./,".",$i)}1' file

prueba con tus datos:

kent$  echo "She sells sea shells by the sea shore"|awk '{for(i=1;i<=NF;i++)if($i~/^[Ss]h/)gsub(/./,".",$i)}1'
... sells sea ...... by the sea .....

Una vieja pregunta, pero encontré una solución sed agradable y relativamente corta de una línea:

sed ':a;s/\([Ss]h\.*\)[^\. ]/\1./;ta;s/[Ss]h/../g'

Funciona reemplazando un carácter a la vez en un bucle.

:a; iniciar un bucle

s/\([Ss]h\.*\)[^\. ] busca un sh seguido de cualquier número de . s (nuestro trabajo completado hasta ahora) seguido de un carácter sin punto o espacio (lo que vamos a reemplazar)

/\1./; reemplácelo por nuestro trabajo completado hasta ahora más otro . .

ta; si hicimos alguna sustitución, bucle, de lo contrario...

s/[Ss]h/../g reemplaza el sh s con dos . s y llámalo un día.


Linux
  1. Uso de sed para buscar y reemplazar archivos de texto en Linux

  2. Uso de los comandos Sed, ex y perl para buscar y reemplazar un texto en Linux

  3. Usando múltiples patrones a la vez con el comando Sed

  4. ¿Usando Notify-send con Cron?

  5. Adición Con 'sed'?

Manipulación de texto con sed y grep

Manipulación de texto en la línea de comando con sed

¿Usando Sed con caracteres especiales?

Usando sed para dividir una cadena con un delimitador

Encuentre y reemplace texto en un archivo entre un rango de líneas usando sed

¿Cómo obtener el texto de una página usando wget sin html?