perl - perl 将数字替换为字母,用于 for
问题描述
Perl 将所有数字替换为字母
abc4xyz5u
至
abcdxyzeu
我试试这个,但它不起作用:
echo 'abc4xyz5u' | perl -pe'@n=1..9;@a=a..j;@h{@n}=@a;s#$n[$_]#$h{$&}#g for 0..$#n'
我知道 y/[1-9]/[aj]/,但我想用一个替代品。
解决方案
您的问题在
s#$n[$_]#$h{$&}#g for 0..$#n
您希望$_
成为您的输入(以便s###
对其应用),但也$n[$_]
可以使用$_
from for 循环(0
to $#n
)。如果您要添加打印,您会注意到$_
此循环中的 ' 值是0
to $#n
,而不是您的输入。
你可以做些什么来修复它是这样的:
$r=$_; $r=~s#$n[$_]#$h{$&}#g for 0..$#n; $_=$r
但这要复杂得多。我会改为:
s#([1-9])#$h{$1}#g
或者,不使用%h
(因为,让我们面对现实,带有 等的哈希0 => a
应该1 => b
是一个数组):
perl -pe '@a="a".."j"; s#([1-9])#$a[$1-1]#g'
或者,根本不需要数组(我会让你决定是否觉得它更容易或更难阅读;我个人觉得很好),
perl -pe 's/([1-9])/chr(ord("a")+$1-1)/ge'
推荐阅读
- php - 无法在 shell_exec 中运行 sudo 命令
- python - 有什么方法可以使用 python 在 selenium 中单击 svg 元素?
- tensorflow - 使用带有 tf.image.adjust_jpeg_quality 的 tensorflow 时出错,输出形状未知?
- python - 获取可能的路径
- r - 如何在 R 数据框中使用两个不同的函数聚合两个不同的列
- gdb - VirtualBox GDB 存根
- java - 如何使用 g.drawArc() 逆时针制作弧线?
- python - 在 Django 中使用表单并检查是否输入了所有输入字段
- amazon-web-services - AWS Amplify - 尝试运行放大模拟时出错
- c++ - 字符串操作:将目录路径中的字符更改为类似于 linux shell 上的目录路径