[regex] sed를 사용하여 문자열에서 텍스트를 추출하는 방법은 무엇입니까?

내 예제 문자열은 다음과 같습니다.

This is 02G05 a test string 20-Jul-2012

이제 위의 문자열에서 02G05. 이를 위해 sed와 함께 다음 정규식을 시도했습니다.

$ echo "This is 02G05 a test string 20-Jul-2012" | sed -n '/\d+G\d+/p'

그러나 위의 명령은 아무것도 인쇄하지 않으며 내가 믿는 이유는 내가 sed에 제공 한 패턴과 일치 할 수 없기 때문입니다.

그래서, 내 질문은 내가 여기서 뭘 잘못하고 있고 그것을 수정하는 방법입니다.

위의 문자열과 패턴을 파이썬으로 시도하면 결과가 나타납니다.

>>> re.findall(r'\d+G\d+',st)
['02G05']
>>>



답변

이 패턴 \dsed. [0-9]또는 [[:digit:]]대신 시도하십시오 .

전체 일치하는 행이 아닌 실제 일치 만 인쇄하려면 대체를 사용하십시오.

sed -n 's/.*\([0-9][0-9]*G[0-9][0-9]*\).*/\1/p'


답변

사용은 grep -E어떻습니까?

echo "This is 02G05 a test string 20-Jul-2012" | grep -Eo '[0-9]+G[0-9]+'


답변

sed인식하지 못하는 경우 \d, 사용 [[:digit:]]대신. 또한 이스케이프 +하거나 -r스위치 ( -EOS X의 경우)를 사용해야합니다 .

참고 [0-9]아랍어 힌두교 숫자뿐만 아니라 작동합니다.


답변

대신 이것을 시도하십시오.

echo "This is 02G05 a test string 20-Jul-2012" | sed 's/.* \([0-9]\+G[0-9]\+\) .*/\1/'

그러나 한 줄에 두 개의 패턴이 있으면 두 번째 패턴을 인쇄합니다.


답변

rextract를 사용해보십시오 . 정규식을 사용하여 텍스트를 추출하고 다시 형식화 할 수 있습니다.

예:

$ echo "This is 02G05 a test string 20-Jul-2012" | ./rextract '([\d]+G[\d]+)' '${1}'

2G05


답변