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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
22
0
55 459
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

$ cat > file
this line has whitespace
thislinedoesnthave
$ egrep [[:space:]] file 
this line has whitespace

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

В Solaris нет ли файла типа "eselect" (см. Gentoo) или альтернативного файла для установки вашей версии egrep по умолчанию?

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

Вы могли бы получить признание, если бы объяснили, где находится «здесь». Предположительно это был не Solaris 10. Или, если это был Solaris 10, то, вероятно, вы использовали не / usr / bin / egrep.

Jonathan Leffler 16.01.2009 03:57

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

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

Ответ принят как подходящий

Я вижу ту же проблему в 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

Я не понимаю, почему вы говорите, что у вас такая же проблема, похоже, она работает с egrep ..?

Aif 16.01.2009 13:15

По умолчанию egrep не поддерживает расширенные наборы символов, такие как [[: space:]]. Вам нужно либо изменить свой PATH, либо указать абсолютный путь, как я сделал выше.

Jon Ericson 16.01.2009 20:08

Какая это была версия egrep?

mkierc 20.12.2015 16:41

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

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

egrep '[ ^I]' file

Этот ^I является фактическим символом табуляции, а не двумя символами ^ и I.

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

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

Хорошее решение. Мне нравится идея работать с наименьшим общим знаменателем

thecoshman 13.06.2012 14:18
GNU grep 2.5.4 на CMD согласен с [ \t]+, чтобы соответствовать одному или нескольким пробельным символам.
handle 09.08.2016 16:09

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

$'foo\tbar'

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

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

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

Другие вопросы по теме