내 예제 문자열은 다음과 같습니다.
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']
>>>
답변
이 패턴 \d
은 sed
. [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
스위치 ( -E
OS 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