各行の終わりにダイナミックアラビア数字を表示

各行の終わりにダイナミックアラビア数字を表示

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ソリューションと似ていますが、1つの重要な違いは、基本的にRakuでUnicodeがうまく処理されることです(覚えておくべき追加のコマンドラインフラグがない)。キャプチャは$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

関連情報