각 줄 끝 부분에 역동부 아라비아 숫자 표시

각 줄 끝 부분에 역동부 아라비아 숫자 표시

10,000줄의 파일이 있고 각 줄 끝에 숫자가 있습니다. 예를 들면 다음과 같습니다.

asdf ggg ١
gghh rtt ٣٢٥
tyyu bnnn jigff ٢٧

모든 숫자의 자릿수를 역순으로 배열하세요. 올바른 순서는 다음과 같습니다.

asdf ggg ١
gghh rtt ٥٢٣
tyyu bnnn jigff ٧٢

각 행의 숫자 순서를 바꾸도록 도와주실 수 있나요?

동부 아랍어숫자:

(٠, ١, ٢, ٣, ٤, ٥, ٦, ٧, ٨, ٩)

답변1

펄 사용:

$ perl -CSD -pe 's/(\d+)$/reverse($1)/e' file
asdf ggg ١
gghh rtt ٥٢٣
tyyu bnnn jigff ٧٢

그러면 각 입력 줄에 대체 명령이 적용됩니다. 줄 끝과 일치하는 숫자 문자열을 바꿉니다. 일치하는 숫자 문자열이 무엇이든 이 reverse()함수는 이를 반전시킵니다. 복원된 결과는 대체에서 대체 텍스트로 사용됩니다.

후행은 Perl이 명령을 평가되는 것으로 /e처리하도록 합니다 .reverse($1)

UTF-8 I/O를 활성화하는 -CSD옵션입니다 .perl

답변2

사용행복하다(이전 Perl_6)

~$ raku -pe 's/ (\d+) $ /{flip($0)}/;'  file

또는

~$ raku -pe 's/ (\d+) $ /{$0.flip}/;'  file

입력 예:

asdf ggg ١
gghh rtt ٣٢٥
tyyu bnnn jigff ٢٧

예제 출력:

asdf ggg ١
gghh rtt ٥٢٣
tyyu bnnn jigff ٧٢

위의 Raku 솔루션은 이미 게시된 Perl 솔루션과 유사하지만 한 가지 중요한 차이점은 기본적으로 Raku에서 유니코드가 잘 처리된다는 것입니다(기억할 추가 명령줄 플래그가 없음). 캡쳐는 $0라쿠부터 시작됩니다. Raku의 키워드는 약간 다릅니다(더 정확합니까?). 문자열의 문자를 바꾸려면 키워드를 사용하고 flip, 목록의 순서를 바꾸려면 키워드를 사용합니다 reverse.

{ … }정규식의 코드 블록은 중괄호로 표시됩니다. Raku를 배울 때 /ePerl(5) 플래그를 사용하면 좋은 메시지를 받게 됩니다.

Unsupported use of /e.  In Raku please use: interpolated {...} or s{} =
...  form

https://docs.raku.org/언어/unicode
https://docs.raku.org/언어/regexes
https://raku.org

관련 정보