egrep поиск пробелов - PullRequest
       24

egrep поиск пробелов

17 голосов
/ 16 января 2009

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

Ранее я использовал RegEx с Perl и C #, и они оба поддерживают шаблон \s для поиска пробелов. egrep (или, по крайней мере, версия, которую я использую), похоже, не поддерживает этот шаблон.

В нескольких статьях онлайн я наткнулся на сокращение [[: space:]], но, похоже, это не работает. Любая помощь приветствуется.

Использование: SunOS 5.10

Ответы [ 5 ]

22 голосов
/ 16 января 2009

Я вижу ту же проблему в SunOS 5.10. /usr/bin/egrep не поддерживает расширенные регулярные выражения.

Попробуйте использовать /usr/xpg4/bin/egrep:

$ echo 'this line has whitespace
thislinedoesnthave' | /usr/xpg4/bin/egrep '[[:space:]]'
this line has whitespace

Другим вариантом может быть использование perl:

$ echo 'this line has whitespace
thislinedoesnthave' | perl -ne 'chomp;print "$_\n" if /[[:space:]]/'
this line has whitespace
12 голосов
/ 16 января 2009

Если вы используете «ухудшенные» версии grep (я цитирую этот термин, потому что большинство UNIX'ов, над которыми я работаю, по-прежнему используют оригинальные RE, а не те, которые имеют «\s» или «[[:space:]]»: -), вы можете просто вернуться к самой низкой форме RE.

Например, если :space: определено как пробелы и табуляции, просто используйте:

egrep '[ ^I]' file

То, что ^I является действительным символом табуляции, а не двумя символами ^ и I.

Предполагается, что :space: - это , определенный как символы табуляции и пробелы, в противном случае настройте параметры в пределах символов [].

Преимущество использования ухудшенных RE состоит в том, что они должны работать на всех платформах (по крайней мере, для ASCII; Unicode или неанглийские языки могут иметь разные правила, но я редко нахожу необходимость).

1 голос
/ 10 сентября 2012

Если вы используете bash, синтаксис для размещения вкладки в строке:

$'foo\tbar'

Недавно я работал с sed, чтобы сделать некоторые исправления для файла с разделителями табуляции. Часть файла была:

sed -E -e $'s/\t--QUOTE--/\t"/g'

Этот аргумент анализируется bash, и sed видит регулярное выражение с буквенными символами табуляции.

0 голосов
/ 16 января 2009

Возможно, вам следует защищать шаблон с помощью кавычек (если bash или что-то эквивалентное используемой оболочке).

[и] может иметь особое значение для оболочки.

0 голосов
/ 16 января 2009
$ cat > file
this line has whitespace
thislinedoesnthave
$ egrep [[:space:]] file 
this line has whitespace

Работает под Debian.

Для Solaris, не существует ли типа "eselect" (см. Gentoo) или файла альтернатив, чтобы установить по умолчанию вашу версию egrep?

Вы пробовали grep -E, потому что, если egrep, который находится на вашем пути, не является хорошим, возможно, grep есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...