GNU/Linux >> Znalost Linux >  >> Linux

Odstraňte všechny speciální znaky a velká a malá písmena z řetězce v bash

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

Linux
  1. Sed Odebrat znaky z nového řádku?

  2. Vytisknout řetězec obsahující jednotlivé uvozovky a další speciální znaky?

  3. Uniknout neznámým znakům z řetězce pro -exec?

  1. Jak odstranit všechny adresáře .svn z adresářů mých aplikací

  2. Otestujte, zda řetězec nemá v Bash znaky bez mezer

  3. Jak grepovat řetězec v adresáři a všech jeho podadresářích?

  1. Bash skript k odstranění nejstaršího souboru ze složky?

  2. Exportujte proměnnou z bash a použijte ji v Pythonu

  3. Jak odstranit neplatné znaky z názvů souborů?