GNU/Linux >> Belajar Linux >  >> Linux

Hapus semua karakter khusus dan huruf besar-kecil dari string di bash

cat yourfile.txt | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]'

tr pertama menghapus karakter khusus. d artinya hapus, c berarti komplemen (membalikkan set karakter). Jadi, -dc berarti hapus semua karakter kecuali yang ditentukan. \n dan \r disertakan untuk mempertahankan baris baru gaya linux atau windows, yang saya asumsikan Anda inginkan.

Yang kedua menerjemahkan karakter huruf besar menjadi huruf kecil.


Solusi BASH 4+ murni:

$ filename='Some_randoM data1-A'
$ f=${filename//[^[:alnum:]]/}
$ echo "$f"
SomerandoMdata1A
$ echo "${f,,}"
somerandomdata1a

Fungsi untuk ini:

clean() {
    local a=${1//[^[:alnum:]]/}
    echo "${a,,}"
}

Cobalah:

$ clean "More Data0"
moredata0

jika Anda menggunakan pendekatan mkelement0 dan Dan Bliss. Anda juga dapat melihat ekspresi reguler sed + POSIX.

cat yourfile.txt | sed 's/[^a-zA-Z0-9]//g'

Sed mencocokkan semua karakter lain yang tidak terdapat dalam tanda kurung kecuali huruf dan angka dan menghapusnya.


Saya telah menggunakan tr untuk menghapus karakter apa pun yang bukan bagian dari [:print:] kelas

cat file.txt | tr -dc '[:print:]'

atau

echo "..." | tr -dc '[:print:]'

Selain itu, Anda mungkin ingin | (pipa) output ke od -c untuk mengonfirmasi hasilnya

cat file.txt | tr -dc '[:print:]' | od -c

Linux
  1. Bash Script Untuk Menghapus File Terlama Dari Folder A?

  2. Cetak String Termasuk Kutipan Tunggal Dan Karakter Khusus Lainnya?

  3. linux bash, string case unta untuk dipisahkan dengan tanda hubung

  1. Uji apakah string memiliki karakter non spasi di Bash

  2. Bagaimana cara mengambil string dalam direktori dan semua subdirektorinya?

  3. Hapus baris tertentu dari file riwayat Bash

  1. bash - hapus semua direktori (dan konten) tetapi bukan file di pwd

  2. Bagaimana cara menghapus karakter tambahan dalam nama file di Bash?

  3. Skrip Bash untuk menghapus file terlama dari folder