2017-02-02 20 views
2

Я бегу Mint Xfce и пытающиеся Grep из терминала, используя следующие:Grep, исключая специальные письма, как умляутов

grep -E -o '^[A-Za-z]{1,}\s[A-Za-z]{1,}\s[0-9]{1,}' sourcefile.txt | sort -f > newfile.txt 

Исходный файл представляет собой текстовый файл, в котором каждая строка выглядит как

<string><space><string><tab><number><tab><number><tab>... 

где строки имеют буквы, цифры, знаки препинания и специальные символы, а числа - целые числа.

Моя цель состоит в том, чтобы извлечь две строки и первое число для только строки, в которых строки содержат только английские буквы (a-z, верхний или нижний регистр).

Вышеупомянутая команда оставляет строки с пунктуацией и номерами, но строки, в которых строки имеют специальные буквы, такие как u umlauts (Ü), каким-то образом проходят и отправляются в файл newfile.txt. Я чувствую, что мне не хватает чего-то очевидного, но тонна Googling только возвращает мне назад о том, как grep для специальных писем. Я проверил регулярное выражение на https://regex101.com/, и umlauts не совпадают, что заставляет меня думать, что проблема связана не с моим регулярным выражением.

Спасибо за любую помощь, которую вы можете предоставить!

ответ

1

Необходимо временно изменить локаль. Try:

LC_ALL="C" grep -E -o '^[A-Za-z]{1,}\s[A-Za-z]{1,}\s[0-9]{1,}' sourcefile.txt | sort -f > newfile.txt 

Он работал для меня на Ubuntu. Чтобы вернуться к вашему языку, просто закройте окно консоли.

+0

Спасибо! Я не понимаю, почему это не сработало с первого взгляда, но теперь это работает. –

+0

В новом окне консоли, если вы наберете 'echo $ LC_NAME', вы не увидите' C' в качестве вывода, но, я уверен, ваши языковые предпочтения вместе с UTF-8. «LC_ALL» временно переопределяет переменные «LC_ *». –