SED - невозможно выполнить некоторые команды для кодированных символов UTF-8 - PullRequest
3 голосов
/ 19 апреля 2011

У меня есть файл, который выглядит так:

<text top="123" left="45" width="50" height="17" font="8">Måndag</text>

Как отмечено в теме, этот файл кодируется в utf-8. При использовании этой команды:

cat file | sed 's_.*top="\([0-9][0-9]*\)" left="\([0-9][0-9]*\)".*>\(.*\)<.*_\1 \2 \3_'

никогда не завершает выполнение и ничего не печатает.

Однако, выполняя такую ​​строку:

cat file | sed 's/å/FOO/'

дает мне правильный вывод:

<text top="123" left="45" width="50" height="17" font="8">MFOOndag</text>

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

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Самый простой способ сделать это надежно - просто использовать perl вместо sed:

bash$ perl -CSAD -pe 's/foo/bar/g'

Это позволит использовать Unicode в ваших аргументах, потоках std и всех обрабатываемых вами файлах.

1 голос
/ 19 апреля 2011

Не все seds созданы для обработки UTF-8.Я бы посмотрел на источник, чтобы увидеть, были ли применены какие-либо соответствующие патчи.FTR, Red Hat, производные от Red Hat do , правильно обрабатывают UTF-8.

0 голосов
/ 19 апреля 2011

Попробуйте это предложение.Похоже, это может сработать для вас.

...