GNU/Linux >> Belajar Linux >  >> Linux

Ganti semua karakter kecuali empat karakter pertama

Dengan GNU Sed,

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

Ini hanya melewatkan penggantian 4 karakter pertama dari string dan melakukan penggantian untuk semua karakter lainnya.

Alternatif POSIX dengan Awk (walaupun mungkin ada yang lebih sederhana),

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

POSIXly (menurut saya), Anda dapat menggunakan sed loop untuk berulang kali mengganti non-x pertama karakter mengikuti awalan 4 karakter:

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

Ganti [^x] dengan [^x ] jika Anda hanya ingin melakukan substitusi di kolom pertama (checksum).


Dengan perl jika GNU sed tidak tersedia:

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

^.{4}(*SKIP)(*F) akan mencegah penggantian empat karakter pertama

|. menentukan pola alternatif yang harus diganti


Untuk mengubah checksum saja:

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

Jika md5sum keluaran dimulai dengan \ (misalnya:jika nama file memiliki karakter baris baru), maka Anda dapat menggunakan ^\\?.{4} bukannya ^.{4} untuk mengizinkan lima karakter pertama dibiarkan terbuka kedoknya.


Linux
  1. Ganti Semua Baris Baru Ke Spasi Kecuali Yang Terakhir?

  2. Pindahkan semua file kecuali satu

  3. Hapus lima karakter pertama pada baris mana pun dari file teks di Linux dengan sed

  1. dapatkan 5 karakter pertama dari setiap baris dalam skrip Shell

  2. Hapus semua file kecuali 3 terbaru dalam skrip bash

  3. Membunuh semua contoh Chrome di baris perintah?

  1. Yang pertama disiarkan seluruhnya di Linux

  2. Sed:Hapus Semua Kemunculan String Kecuali Yang Pertama?

  3. Bagaimana cara mengganti semua isi dari satu folder dengan yang lain