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