code

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

codestyles 2020. 9. 24. 07:52
반응형

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'

사용은 egrep어떻습니까?

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

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

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

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


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

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


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

예:

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

2G05

참고 URL : https://stackoverflow.com/questions/11568859/how-to-extract-text-from-a-string-using-sed

반응형