cat yourfile.txt | tr -dc '[:alnum:]\n\r' | tr '[:upper:]' '[:lower:]'
První tr smaže speciální znaky. d znamená smazat, c znamená doplněk (převrácení znakové sady). Takže -dc znamená odstranit všechny znaky kromě těch, které jsou specifikovány. \n a \r jsou zahrnuty pro zachování nových řádků ve stylu linux nebo windows, což předpokládám chcete.
Druhý překládá velká písmena na malá.
Čistý roztok BASH 4+:
$ filename='Some_randoM data1-A'
$ f=${filename//[^[:alnum:]]/}
$ echo "$f"
SomerandoMdata1A
$ echo "${f,,}"
somerandomdata1a
Funkce pro toto:
clean() {
local a=${1//[^[:alnum:]]/}
echo "${a,,}"
}
Zkuste to:
$ clean "More Data0"
moredata0
pokud používáte přístup mkelement0 a Dan Bliss. Můžete se také podívat do regulárního výrazu sed + POSIX.
cat yourfile.txt | sed 's/[^a-zA-Z0-9]//g'
Sed odpovídá všem ostatním znakům, které nejsou obsaženy v hranatých závorkách, kromě písmen a číslic a odstraňte je.
Použil jsem tr odstranit všechny znaky, které nejsou součástí [:print:] třída
cat file.txt | tr -dc '[:print:]'
nebo
echo "..." | tr -dc '[:print:]'
Kromě toho můžete chtít | (potrubí) výstup na od -c pro potvrzení výsledku
cat file.txt | tr -dc '[:print:]' | od -c