GNU/Linux >> Tutoriels Linux >  >> Linux

Remplacer tous les caractères sauf les quatre premiers caractères

Avec GNU Sed,

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

Cela saute simplement la substitution des 4 premiers caractères de la chaîne et effectue la substitution pour tous les autres caractères.

Une alternative POSIX avec Awk (bien qu'il y ait probablement quelque chose de plus simple),

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

POSIXly (je pense), vous pouvez utiliser une boucle sed pour remplacer à plusieurs reprises le premier non-x caractère suivant le préfixe à 4 caractères :

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

Remplacer [^x] avec [^x ] si vous souhaitez uniquement effectuer la substitution dans le premier champ (la somme de contrôle).


Avec perl si GNU sed n'est pas disponible :

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

^.{4}(*SKIP)(*F) empêchera le remplacement des quatre premiers caractères

|. spécifie le modèle alternatif qui doit être remplacé


Pour modifier uniquement la somme de contrôle :

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

Si le md5sum la sortie commence par un \ (par exemple :si le nom du fichier a un caractère de nouvelle ligne), vous pouvez utiliser ^\\?.{4} au lieu de ^.{4} pour permettre aux cinq premiers caractères de ne pas être masqués.


Linux
  1. Le premier à diffuser entièrement sur Linux

  2. Remplacer toutes les nouvelles lignes par un espace sauf la dernière ?

  3. Supprimez tous les fichiers sauf les 3 plus récents dans le script bash

  4. Comment remplacer tout le contenu d'un dossier par un autre

  5. Comment remplacer récursivement les caractères par sed ?

Comment remplacer un caractère par un autre dans tous les noms de fichiers des répertoires actuels ?

Supprimer tous les fichiers d'un dossier sauf le dernier (le plus récent) 20 ?

Compter les caractères de chaque ligne avec Wc ?

Afficher tout le fichier jusqu'au match ?

Supprimer les lignes d'en-tête supplémentaires du fichier, à l'exception de la première ligne ?

Premiers caractères de la commande répétés à l'écran lors de l'achèvement ?