Как извлечь текст из строки с помощью СЭД?



мой пример строки выглядит следующим образом:



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']
>>>
531   5  

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

    Ничего не найдено.