如何在tr中使用正则表达式模式仅替换比赛的最后一个字符?

时间:2019-03-13 14:59:10

标签: bash

我正尝试在bash中使用tr来替换比赛的最后一个字符。该字符串将包含5位数字的子字符串,后跟一个破折号,但我想用斜杠替换该破折号。

我想使用这样的东西:

echo "xyzvb12345-Ab-C5678-dEf" | tr "#####-" "#####/"

要获得这样的输出:

xyzvb12345/Ab-C5678-dEf

是否可以使用tr来做到这一点?还是sed

编辑: 这不是仅查找和替换文本的许多票证的重复。在标记为重复项之前,请仔细阅读。

2 个答案:

答案 0 :(得分:1)

echo "xyzvb12345-Ab-C5678-dEf" | sed 's/\([0-9]\{5\}\)-/\1\//g'

[0-9]匹配数字

\{5\}匹配上一组(数字)中的五个

\(...\)设置匹配组,以便在替换中被引用(作为\1

最后

g告诉sed替换输入中的所有匹配项

答案 1 :(得分:0)

echo "xyzvb12345-Ab-C5678-dEf" | sed '0,/-/s//\//'

感谢this other answer