bash:使用sed替换substring之间的行尾

时间:2013-05-13 22:18:21

标签: bash sed

我正在尝试做一些相对简单的事情,但我不知道该怎么做。

我的mac地址如下:

xx:yy:yy:zz:yy:yy

我想修改:yy:在字符串的末尾,使它变为:01: 使用上面的示例,它变为:

xx:yy:yy:zz:01:yy

基本上是最后一个::在字符串中的字符。

我正在尝试以下但是它无效:

echo "$var" | sed 's/:*:*$/:01:/'

我知道这是一个简单的问题,但任何帮助都会受到赞赏。

4 个答案:

答案 0 :(得分:2)

假设你在最后一个之后有两个字符:答案是:

echo xx:yy:yy:zz:yy:yy | sed 's/\(.*:\).*\(:..\)$/\101\2/'

如果您认为我的假设是错误的,我可以改进它。

答案 1 :(得分:2)

awk更容易解决这类问题:

awk -F: -v OFS=":" '$5="01"'

示例:

kent$  echo "xx:yy:yy:zz:yy:yy"|awk -F: -v OFS=":" '$5="01"'
xx:yy:yy:zz:01:yy

答案 2 :(得分:1)

echo "$var" | sed 's/[^:]*/01/5'

答案 3 :(得分:0)

jthills的回答很好,您需要用。*代替*还要$在我的bash(尝试使用man bash)中,使用$会出错,因为我认为用户输入的解析将$与参数匹配(例如$ 0 $ 1 $ 2),而不是regrex中的结束键。尝试将$锚点删除到该行的末尾。 Regexcrosswords.com的帮助对我有所帮助。

知道sed -e是用于脚本,而's///'指定了脚本,则可能会有所裨益,但是它也可以是's_f_r_;/f/r/; ... \/find\/replace\/',或者表示由下划线_斜杠或{{1}表示}正斜杠+反斜杠。

我还没有找到一种搜索括号字符的方法。