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を学ぶときに/e
Perl(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