GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ersetzen Sie alle Zeichen außer den ersten vier Zeichen

Mit GNU Sed,

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

Dies überspringt einfach die Ersetzung der 4 ersten Zeichen der Zeichenfolge und führt die Ersetzung für alle anderen Zeichen durch.

Eine POSIX-Alternative mit Awk (obwohl es wahrscheinlich etwas Einfacheres gibt),

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

POSIXly (glaube ich) könnten Sie eine sed-Schleife verwenden, um wiederholt den ersten Nicht-x zu ersetzen Zeichen nach dem 4-stelligen Präfix:

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

Ersetzen Sie [^x] mit [^x ] wenn Sie die Substitution nur im ersten Feld (der Prüfsumme) vornehmen möchten.


Mit perl wenn GNU sed ist nicht verfügbar:

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

^.{4}(*SKIP)(*F) verhindert das Ersetzen der ersten vier Zeichen

|. gibt das alternative Muster an, das ersetzt werden muss


Um nur die Prüfsumme zu ändern:

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

Wenn die md5sum Die Ausgabe beginnt mit einem \ (z. B. wenn der Dateiname ein Zeilenumbruchzeichen hat), dann können Sie ^\\?.{4} verwenden statt ^.{4} um zuzulassen, dass die ersten fünf Zeichen unmaskiert bleiben.


Linux
  1. Wie ersetzt man ein Zeichen durch ein anderes in allen Dateinamen der aktuellen Verzeichnisse?

  2. Kann Sed Zeilenumbrüche ersetzen?

  3. Alle Dateien in einem Ordner außer den letzten (neuesten) 20 löschen?

  4. Die Zeichen jeder Zeile mit Wc zählen?

  5. Alle Dateien bis zum Match anzeigen?

Sed:Alle Vorkommen einer Zeichenfolge außer der ersten löschen?

Werden die ersten Zeichen des Befehls beim Beenden im Display wiederholt?

Alle Zeilenumbrüche außer dem letzten durch Leerzeichen ersetzen?

Holen Sie sich die ersten 5 Zeichen aus jeder Zeile im Shell-Skript

Löschen Sie alle Dateien außer den neuesten 3 im Bash-Skript

Alle Instanzen von Chrome in der Befehlszeile beenden?