GNU/Linux >> Linux Esercitazione >  >> Linux

Sostituisci tutti i caratteri tranne i primi quattro caratteri

Con GNU Sed,

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

Questo salta semplicemente la sostituzione dei primi 4 caratteri della stringa ed esegue la sostituzione per tutti gli altri caratteri.

Un'alternativa POSIX con Awk (anche se probabilmente c'è qualcosa di più semplice),

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

POSIXly (credo), potresti usare un ciclo sed per sostituire ripetutamente il primo non-x carattere che segue il prefisso di 4 caratteri:

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

Sostituisci [^x] con [^x ] se vuoi solo fare la sostituzione nel primo campo (il checksum).


Con perl se GNU sed non è disponibile:

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

^.{4}(*SKIP)(*F) impedirà la sostituzione dei primi quattro caratteri

|. specifica il modello alternativo che deve essere sostituito


Per modificare solo il checksum:

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

Se md5sum l'output inizia con un \ (ad esempio:se il nome del file ha un carattere di nuova riga), allora puoi usare ^\\?.{4} invece di ^.{4} per consentire di non mascherare i primi cinque caratteri.


Linux
  1. Come viene interpretato il jolly * come un comando?

  2. Sposta tutti i file tranne uno

  3. Elimina i primi cinque caratteri su qualsiasi riga di un file di testo in Linux con sed

  4. ottenere i primi 5 caratteri da ogni riga nello script di shell

  5. Come sostituire tutti i contenuti di una cartella con un'altra

Come sostituire un carattere con un altro in tutti i nomi di file delle directory correnti?

Sed può sostituire i caratteri di nuova riga?

Mostra tutto il file fino alla partita?

Rimuovere le righe di intestazione extra dal file, ad eccezione della prima riga?

Se ^a^b sostituisce "a" una volta nell'ultimo comando, cosa uso per sostituire tutte le occorrenze di "a"?

Primi caratteri del comando ripetuti sul display durante il completamento?