sourcecode

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

codebag 2023. 5. 13. 09:39
반응형

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

를 사용하는 것은 어떻습니까?grep -E?

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

패턴\d에 의해 지원되지 않을 수 있습니다.sed.해라[0-9]또는[[:digit:]]대신.

전체 일치 라인이 아닌 실제 일치만 인쇄하려면 대체를 사용합니다.

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

대신 사용해 보십시오.

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]아라비아-힌두 숫자에서도 작동합니다.

sed -En을 사용하여 정규식을 단순화할 수 있습니다.

n: suppress automatic printing of pattern space
E: use extended regular expressions in the script
$ echo "This is 02G05 a test string 20-Jul-2012" | sed -En 's/.*([0-9][0-9]+G[0-9]+).*/\1/p'

02G05

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

예:

$ 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

반응형