Как извлечь текст из строки с помощью СЭД?
мой пример строки выглядит следующим образом:
This is 02G05 a test string 20-Jul-2012
теперь из приведенной выше строки Я хочу извлечь 02G05. Для этого я попробовал следующее регулярное выражение с sed
$ echo "This is 02G05 a test string 20-Jul-2012" | sed -n '/d+Gd+/p'
но вышеприведенная команда ничего не печатает, и я считаю, что она не может ничего сопоставить с шаблоном, который я предоставил sed.
Итак, мой вопрос: что я делаю неправильно и как это исправить.
когда я пытаюсь выше строку и шаблон с python я получаю мой результат
>>> re.findall(r'd+Gd+',st)
['02G05']
>>>
5 ответов:
шаблон
\dможет не поддерживаться вашейsed. Попробуй[0-9]или .чтобы напечатать только фактическое совпадение (а не всю совпадающую строку), используйте подстановку.
sed -n 's/.*\([0-9][0-9]*G[0-9][0-9]*\).*//p'
Как насчет использования
egrep?echo "This is 02G05 a test string 20-Jul-2012" | egrep -o '[0-9]+G[0-9]+'
sedне признает\dиспользуйте[[:digit:]]вместо. Вам также нужно будет избежать+или использовать-rпереключатель (-Eна OS X).отметим, что
[0-9]работает также для арабско-индуистских цифр.
попробуйте это вместо этого:
echo "This is 02G05 a test string 20-Jul-2012" | sed 's/.* \([0-9]\+G[0-9]\+\) .*//'но обратите внимание, если есть два шаблона на одной линии, он будет печатать 2-й.
попробуйте использовать rextract. Он позволит вам извлечь текст с помощью регулярного выражения и переформатировать его.
пример:
$ echo "This is 02G05 a test string 20-Jul-2012" | ./rextract '([\d]+G[\d]+)' '' 2G05
Comments