2013-11-19 19 views
1

У меня есть файл с другим кодированием, чем у машины. При использовании регулярного выражения . не соответствует непечатаемым символам для текущего набора символов.Как совместить непечатаемые символы?

следующих принты 0:

echo -e "\xfc" | awk '{ print match($0, "^.*$") }' 

Как соответствуют всем символам, включая непечатаемые символы?

+0

На моем Ubuntu это: 'echo -e" \ xfc "| awk '{print match ($ 0, "^. * $")}' 'prints' 1' – Jotne

+0

На моем другом Ubuntu это печатает '0', поэтому может возникнуть проблема с локальным языком. (Я, хотя я установил то же самое на обоих) – Jotne

+0

Какова цель? Вы хотите просто определить, имеет ли файл непечатаемые символы или что-то еще? – devnull

ответ

1

Я могу подтвердить, что он не работает с de_DE.UTF-8 локали, но оба de_DE.iso88591 и C Распечатайте 1. Я не могу вам сказать, почему, но класс [:alpha:] символ соответствует:

echo -e "\xfc" | awk '{ print match($0, "^([[:alpha:]]|.)*$") }' 

Или, может быть, вы могли бы изменить языковые настройки для этого awk вызова:

OLDLANG=$LANG; export LANG=de_DE.iso88591; echo -e "\xfc" | awk '{ print match($0, "^.*$") }'; export LANG=$OLDLANG 

Смотрите также Using special characters in a string argument to the awk match function. Current locale settings.

+0

himm, я не знаю, почему я до сих пор не принял этот ответ. Вот твой зеленый тик, друг мой;) – palindrom

Смежные вопросы