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