sed
슬래시로 구분된 동일한 숫자의 두 인스턴스를 이 숫자의 한 인스턴스로 바꾸고 싶습니다 . 내 입력 파일에는 다음과 같은 줄이 있습니다.
text (1982/1982) text
text (1983/1983) text
text (1984/1984) text
나는 다음과 같은 출력을 원합니다 :
text (1982) text
text (1983) text
text (1984) text
입력 파일에 슬래시로 구분된 다른 숫자 문자열이 있을 수 있으므로 괄호를 일치시켜야 합니다.
존재하다BB 에디터검색 모드와 교체 모드를 사용하여 \(([0-9]{4})/\1\)
이 작업을 수행 할 수 있습니다 \(\1\)
. 그러나 sed
동등한 확장 정규식에서는 작동하지 않는 것 같습니다.
echo 'text (1984/1984) text' | sed -E 's_\(([0-9]{4})/\1\)_\(\1\)_g'
반품:
text (1984/1984) text
하지만 나는 원한다:
text (1984) text
이를 수행할 수 있는 확장 정규식은 무엇입니까 sed
?
저는 macOS에 내장된 것을 사용하고 있습니다 sed
.
답변1
OSX 버전은 sed
꽤 짜증납니다(실제로는 BSD 버전). 저는 보통 Brew를 통해 GNU를 설치합니다 sed
:
$ brew search sed
==> Formulae
gnu-sed ✔ libxdg-basedir minised ssed
==> Casks
eclipse-dsl marsedit
exoduseden microsoft-bing-ads-editor
focused osxfuse-dev
google-adwords-editor physicseditor
lego-mindstorms-education-ev3 prefs-editor
licensed subclassed-mnemosyne
설치하세요:
$ brew install gnu-sed
그런 다음 다음과 같이 사용할 수 있습니다.
$ gsed ....
짜잔, 이제 귀하의 예가 작동합니다.
$ echo 'text (1984/1984) text' | sed -E 's_\(([0-9]{4})/\1\)_\(\1\)_g'
text (1984/1984) text
$ echo 'text (1984/1984) text' | gsed -E 's_\(([0-9]{4})/\1\)_\(\1\)_g'
text (1984) text