使用Linux终端中的Sed命令在字符串中重复一次数字

时间:2016-01-12 03:52:26

标签: linux unix sed terminal

假设我有 <?php v1="cat"; v2="dog"; v3="turtle"; v4="duck"; $animals = array(); for ($i=1; $i<5; $i++) { $animals[]=$ {"v$i"}; } print_r ($animals); ?> ,我希望它成为hell0 w0rld。 我尝试了hell00 w0rld,但只替换sed s/0/00/,它不适用于0,我该怎么办才能替换任何第一个数字,而不只是he1lo wor1d(he11lo wor1d) ? 谢谢!

1 个答案:

答案 0 :(得分:1)

由于您不想仅匹配0,而是想匹配任何数字,因此您需要使用[0-9]。这代表“任何一个数字0-9”。你把它放在括号中“捕获”它,在替换字符串中,你可以添加反射:

$ sed 's/\([0-9]\)/\1\1/' <<< "he1lo wor1d"
he11lo wor1d

如果您想重复第一个数字(根据标题)而不仅仅是数字,则将\+附加到您的角色类。这代表“其中一个或多个”:

$ sed 's/\([0-9]\+\)/\1\1/' <<< "he12o wor1d"
he1212o wor1d

与捕获组\1匹配的后向引用/(.../)的替代方法是使用&,代表完全匹配,即

sed 's/[0-9]/&&/' <<< "he1lo wor1d"

sed 's/[0-9]\+/&&/' <<< "he12lo wor1d"

不再需要/(.../)