我正在尝试做一些相对简单的事情,但我不知道该怎么做。
我的mac地址如下:
xx:yy:yy:zz:yy:yy
我想修改:yy:在字符串的末尾,使它变为:01: 使用上面的示例,它变为:
xx:yy:yy:zz:01:yy
基本上是最后一个::在字符串中的字符。
我正在尝试以下但是它无效:
echo "$var" | sed 's/:*:*$/:01:/'
我知道这是一个简单的问题,但任何帮助都会受到赞赏。
答案 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}表示}正斜杠+反斜杠。
我还没有找到一种搜索括号字符的方法。