Регулярное выражение в BASH - PullRequest
2 голосов
/ 12 марта 2010

Я надеялся, что кто-нибудь сможет ответить на мой быстрый вопрос, пока я схожу с ума!

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

echo 2222 | grep '2\{2\}'

Я ожидаю, что он вернется:

22

Я пробовал варианты, включая:

echo 2222 | grep '2{2}'
echo 2222 | grep -P '2\{2\}'
echo 2222 | grep -E '2\{2\}'

Однако я совершенно вне идей. Я уверен, что это простое исправление параметра / синтаксиса, и я хотел бы помочь! P.S. Я сделал множество поисков в Google, и каждая найденная ссылка не работает в BASH; Регулярные выражения могут работать на самых разных платформах и движках = /

Ответы [ 4 ]

9 голосов
/ 12 марта 2010
echo 2222 | grep -E '2{2}'
2222

Регулярное выражение будет соответствовать шаблону в строке и либо выведет всю строку (2222), если совпадает, либо ничего, если не соответствует.

Это НЕ вытащит часть вывода. Для этого вам нужно что-то вроде sed:

echo 2222 | sed 's/.*\(2\{2\}\).*/\1/'
22
4 голосов
/ 12 марта 2010

Вы можете использовать:

echo 2222 | grep -o '2\{2\}'

за исключением , что он покажет выходные данные дважды, поскольку он совпадает дважды в этой строке.

1 голос
/ 12 марта 2010

, если вы просто ищете два «2» в начале строки, нет необходимости использовать внешние инструменты

string=2222
case "$string" in
 22*) echo "ok";;
esac
1 голос
/ 12 марта 2010

ты не пробовал

echo 2222 | grep -E '2{2}'

это вернется 2222, то есть "это соответствует вашей линии"

sed может помочь вам визуализировать ваше регулярное выражение

echo 22 33 342 22 | sed  's/2\{2\}/<match>/g'

возвращает, например,

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