내 sed RE에 문제가 있나요? 패턴을 찾을 수 없고 교체되지 않음

내 sed RE에 문제가 있나요? 패턴을 찾을 수 없고 교체되지 않음

나는 많은 "문서" 패턴 줄과 그 뒤에 임의의 25개 문자가 있는 Ubuntu 시스템에 거대한 텍스트 파일을 가지고 있습니다.

cussion. But we cancelled. That's correct," Fasel said.
The 2021 IIHF Women's World Championships is scheduled for the Russian city of Ufa.
Document TASS0000202asd07eg370012y
Fasel said that the IIHF had cancelled all women's international tournaments this year, including the IIHF Ice Hockey Women's World Championship Division I Group A in Angers, France on April 12-18.
Document TaSS0asfd0200307eg370012y
Nevertheless, the IIHF president pointed out that there was no decision yet about the men's world championships set to open in Switzerland in May.
Document aASS000020200307eg370012y
"We are working normally with the Swiss association and everybody is thinking and hoping that we can organize the world championship in May," Fasel said when asked about new information on that tournament.
Canada reported the first coronavirus case on January 26. Up to now, 54 cases have been confirmed in the country. In late December 2019, a pneumonia outbreak caused by the COVID-19 virus (previously known as 2019-nCoV) was reported in China's city of Wuhan, an economic and industrial megacity with a population of 12 million. The World Health Organization declared the new coronavirus outbreak a public health emergency of international concern, characterizing it as an epidemic with multiple locations. Outside China, the worst affected countries are Iran, Italy and South Korea. Overall, more than 90 other countries, including Russia, have reported confirmed coronavirus cases. WHO says that new coronavirus cases outside China have passed 21,000, and there are over 400 deaths.
Document TASS0fgs20200307eg370012y

일치하는 모든 줄을 찾고 패턴을 다음과 같이 지정된 문자열로 바꾸고 싶습니다.

sed -i 's/^Document\s{1}\w{25}\n$/MYLINEBREAK/' textfile.txt

그러나 전혀 작동하지 않습니다.

답변1

기본적으로 sedPOSIX 기본 정규 표현식이 사용되며 \s또는 \w또는 심지어 이해하지 못합니다 {}. 또한 \n라인의 끝이기 때문에 a를 일치시키는 방법도 모릅니다 . 이를 수행하는 이식 가능한 방법은 다음과 같습니다.

sed 's/^Document [a-zA-Z0-9-]\{25\}$/MYLINEBREAK/' file

-E확장 정규식을 사용하면 거의 이식성이 있습니다.

sed -E 's/^Document\s[a-zA-Z0-9-]{25}$/MYLINEBREAK/' file

적어도 GNU sed(Linux의 GNU)에서는 다음과 같이 시작한 거의 작업을 더욱 단순화할 수 있습니다.

sed -E 's/^Document\s\w{25}$/MYLINEBREAK/' file

바라보다내 정규 표현식이 X에서는 작동하지만 Y에서는 작동하지 않는 이유는 무엇입니까?다양한 정규식 스타일에 대한 자세한 내용

관련 정보