sed
저는 루마니아어 텍스트나 기타 적합한 Unix 도구를 사용하여 특정 텍스트 대체 작업을 자동화하려고 합니다. 이것은 내 요구 사항입니다.
- 문자의 모든 인스턴스를 내부 단어
â
로 바꿉니다.î
- 어근이 "român"인 단어(예: "Românească", "româneşte" 등)는 변경되지 않은 상태로 유지되어야 합니다.
- "sunt"라는 단어는 "sînt"로 바꿔야 합니다.
예를 들어:
입력하다:
până
împământenit
român
Românească
sunt
cugetând
예상 출력:
pînă
împămîntenit
român
Românească
sînt
cugetînd
여러 스크립트를 시도했지만 sed
그 중 어느 것도 동시에 모든 요구 사항을 충족하지 못했습니다. 누구든지 나를 안내할 수 있나요? 어떤 도움이나 조언이라도 감사하겠습니다!
답변1
설명해주신 대로,
sed '/[rR]omân/!s/â/î/g;s/sunt/sînt/g'
다음 작업이 완료됩니다.
s/â/î/g
ubstiture가s
모두 (g
부분적으로) 나타나는지â
여부î
- "주소"
/[rR]omân/
가 반대!
이므로 이 패턴이 포함된 줄에서는 다음 명령이 작동하지 않습니다. s/sunt/sînt/g
결국 성분의 일부로 단어를 대체했습니다.
참고: 귀하의 예에서는 ă
교체됩니다. 이것이 필요한 경우
sed '/[rR]omân/!s/[âă]/î/g;s/sunt/sînt/g'
답변2
사용행복하다(이전 Perl_6)
~$ raku -ne 'S:g/â/î/ andthen \
S:samecase:g/ (<[rR]>om) (î) (n) /$0â$2/ andthen \
S:g/sunt/sînt/ andthen .put;' file
입력 예:
până
împământenit
român
Românească
sunt
cugetând
예제 출력:
pînă
împămîntenit
român
Românească
sînt
cugetînd
-ne
Raku에는 자동 인쇄가 아닌 명령줄 플래그가 있습니다 . 교체시 Raku의 "big-S" S///
표기법을 사용할 수 있습니다결과 문자열 반환.
andthen
주제 변수( )는 커넥터 위에 다시 로드되므로 $_
각 후속 S///
작업은 이전에 수정된 텍스트에 적용됩니다. 마지막 절은 andthen .put
주제 변수( $_
)를 다시 로드하고 최종 텍스트( .put
yes 의 약어 $_.put
)를 인쇄합니다.
특수 문자를 잘라내거나 붙여넣는 시간을 절약할 수 있도록 유니코드 이름을 사용하는 것이 좋습니다. 따라서 라쿠에서 첫 번째 모음 치환은 실제로 다음과 같이 쓸 수 있습니다.
S:g/\c[LATIN SMALL LETTER A WITH CIRCUMFLEX]/\c[LATIN SMALL LETTER I WITH CIRCUMFLEX]/