2

Как я могу отобразить и удалить все символы> ASCII код 127 из файла?

файл в формате Unicode 16 бит

ОБНОВЛЕНИЕ Деннис решил это, но есть некоторая интересная дискуссия о диапазонах чисел.

2 ответа2

1

Один из подходов состоит в том, чтобы преобразовать файл в шестнадцатеричные цифры, удалить шаблоны цифр, которые вам не нужны, а затем преобразовать обратно.

$ echo 'A Unicode character: [ñ]' | xxd -p | sed 's/c3b1//' | xxd -r -p
A Unicode character: []

Вы можете использовать AWK или любую другую технику манипулирования текстом вместо sed . Будьте осторожны с неоднозначными последовательностями.

Дайте мне знать, если это подходит к тому, что вы имеете в виду.

0

Оглядываясь назад на этот вопрос

Похоже, я использовал одну из этих строк в конце

(кажется, регулярное выражение Денниса)

$ xxd -p a.q | tr -d '\n' | sed "s/([0-9a-f]\{4\})/\1 /g" | sed -r "s/(00[8-9a-f][0-9a-f]|[0-9a-f][1-9a-f][0-9a-f][0-9a-f]|[1-9a-f]0[0-9a-f][0-9a-f])//g" | tr -d ' ' | sed "s/(.*)/feff\1/" | xxd -r -p >a.q2

или это (кажется, мое регулярное выражение)

$ xxd -p a.q | tr -d '\n' | sed "s/([0-9a-f]\{4\})/\1 /g" | sed -r "s/(00[89A-F][0-9A-F]|0[1-9A-F][0-9A-F]{2}|[1-9A-F][0-9A-F]{3})//g" | tr -d ' ' | sed "s/(.*)/feff\1/" | xxd -r -p >a.q2

это некоторый комментарий о том, как я работал, с несколькими тестами.

0080-00FF     00[89A-F][0-9A-F]
0100-0FFF     0[1-9A-F][0-9A-F]{2}
1000-FFFF     [1-9A-F][0-9A-F]{3}

и вот несколько тестов, которые показывают, что регулярное выражение работает. Я поставил их в свой вопрос, когда решил, но я должен был поставить их в ответ.

Всего шестнадцатеричных символов 85

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "[0-9A-F]{4}" | wc -l
85

Всего что я хочу, 72

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "00[0-7][0-F]" | wc -
l
72

Всего что я не хочу, 13

$ xxd -p -u a.aa.txt | sed -r "s/[0-9A-F]{4}/\0 /g" | grep -oP '((?!00[0-7][0-9A-F])(?=[^ ]).){4}' | wc -l
13

Всего что я не хочу, 13

$ xxd -u -p a.aa.txt | sed -r "s/.{4}/\0 /g" | grep -oE "00[89A-F][0-9A-F]|0[1-9A-F][0-9A-F]{2}|[1-9A-F][0-9A-F]{3}" | wc –l
13

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .