GNU/Linux >> Znalost Linux >  >> Linux

Jak odstranit ne-ascii znaky pomocí sed

Zde nabízená řešení mi nefungovala. Možná byl můj problém jiný, ale potřeboval jsem odstranit ASCII barvy a další znaky z jinak čistého ASCII textu.

Nicméně pro mě fungovalo následující:

Odstraňování únikových kódů z textu ASCII

sed -E 's/\x1b\[[0-9]*;?[0-9]+m//g'

V kontextu (BASH):

$ printf "\e[32;1mhello\e[0m\n"
hello

$ printf "\e[32;1mhello\e[0m\n" | cat -vet
^[[32;1mhello^[[0m$

$ printf "\e[32;1mhello\e[0m\n" | sed -E 's/\x1b\[[0-9]*;?[0-9]+m//g' | cat -vet
hello$

Zkusili jste

cat /bin/mkdir | tr -cd "[:print:]"

Myslím, že to problém vyřeší?

Pokud vás zajímá pouze textový obsah, můžete také použít

cat /bin/mkdir | strings

Víte, jaké kódování soubor aktuálně používá? Pokud ano, můžete jej převést pomocí iconv. Je to nástroj pro převod z jednoho kódování znaků na jiné. Pokud je tedy původní soubor v UTF-8 a chcete jej převést na ASCII, můžete použít následující:

iconv -f utf8 -t ascii <inputfile>

Příkaz file ve vstupním souboru vám může sdělit aktuální kódování.

Zajímavé je, že existuje příkaz nazvaný enca, který udělá vše pro to, aby určil použité kódování znaků, pokud znáte jazyk obsahu souboru.

Tato další otázka může být odpovědí.


Zdá se, že to nefunguje s sed . Možná tr udělá?

tr -d '\200-\377'

Nebo s doplňkem:

tr -cd '\000-\177'

Linux
  1. Jak odebrat uživatele v Linuxu pomocí příkazového řádku

  2. Jak odstranit soubory starší než N dní pomocí tmpreaper v Linuxu

  3. Odeberte konkrétní znak pomocí awk nebo sed

  1. Jak odstranit prvních N řádků souboru Ascii pomocí příkazů Shell?

  2. sed - jak udělat skupiny regulárních výrazů pomocí sed

  3. Jak použít sed k odstranění pouze dvojitých prázdných řádků?

  1. Jak zapíšu znaky jiné než ASCII pomocí echa?

  2. Použití sed k odstranění bloku textu

  3. Jak odstranit předponu slova pomocí grep?