GNU/Linux >> Tutoriales Linux >  >> Linux

Reemplazar todos los caracteres excepto los primeros cuatro caracteres

Con base GNU,

md5sum input.txt | sed 's/./x/5g'

Esto simplemente omite la sustitución de los 4 primeros caracteres de la cadena y realiza la sustitución de todos los demás caracteres.

Una alternativa POSIX con Awk (aunque probablemente haya algo más simple),

md5sum xad | awk '{
  four=substr($0, 1, 4)
  rest=substr($0, 5)
  gsub(/./, "x", rest)
  print four, rest
}' OFS=""

POSIXly (creo), podría usar un bucle sed para reemplazar repetidamente el primer no x carácter que sigue al prefijo de 4 caracteres:

$ md5sum input.txt | sed '
:a
s/^\(....x*\)[^x]/\1x/
ta
'

Reemplazar [^x] con [^x ] si solo desea realizar la sustitución en el primer campo (la suma de comprobación).


Con perl si GNU sed no está disponible:

md5sum input.txt | perl -pe 's/^.{4}(*SKIP)(*F)|./x/g'

^.{4}(*SKIP)(*F) evitará el reemplazo de los primeros cuatro caracteres

|. especifica el patrón alternativo que debe ser reemplazado


Para cambiar solo la suma de comprobación:

md5sum ip.txt | perl -pe 's/(^.{4}|\h.*$)(*SKIP)(*F)|./x/g'

Si el md5sum la salida comienza con un \ (por ejemplo:si el nombre del archivo tiene un carácter de nueva línea), puede usar ^\\?.{4} en lugar de ^.{4} para permitir que los primeros cinco caracteres queden sin máscara.


Linux
  1. Sed:¿Eliminar todas las apariciones de una cadena excepto la primera?

  2. ¿Cómo reemplazar un carácter con otro en todos los nombres de archivo de los directorios actuales?

  3. ¿Puede Sed reemplazar los caracteres de nueva línea?

  4. ¿Mostrar todo el archivo hasta el partido?

  5. ¿Eliminar líneas de encabezado adicionales del archivo, excepto la primera línea?

¿Contar los caracteres de cada línea con Wc?

¿Primeros caracteres del comando repetidos en la pantalla al completar?

¿Reemplazar todas las líneas nuevas al espacio excepto la última?

Elimine todos los archivos excepto los 3 más nuevos en bash script

Cómo reemplazar todo el contenido de una carpeta con otra

¿Cómo reemplazar recursivamente los caracteres con sed?