0

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

我有一个mac地址如下:

xx:yy:yy:zz:yy:yy

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

xx:yy:yy:zz:01:yy

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

我正在尝试以下操作,但没有成功:

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

我知道这是一个简单的问题,但请提供任何帮助。

4

4 回答 4

2

假设最后一个 : 后面有两个字符,答案是:

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

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

于 2013-05-13T22:23:13.473 回答
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
于 2013-05-13T22:29:54.240 回答
1
echo "$var" | sed 's/[^:]*/01/5'
于 2013-05-14T05:38:09.160 回答
0

jthills 的答案很好,你需要放 .* 而不是 * 在我的 bash 中(尝试 man bash)我使用 $ 时遇到错误,因为我认为用户输入的解析是为了将 $ 与参数匹配(例如 $0 $1 $2) 而不是正则表达式中的结束键。尝试将 $ 锚点删除到行尾。Regexcrosswords.com 的帮助对我有所帮助。

您可能会受益于知道 sed -e 用于脚本并且's///'指定脚本但它也可以是's_f_r_;/f/r/; ... \/find\/replace\/'或者这意味着被下划线_斜杠或正斜杠\/+反斜杠删除。

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

于 2018-10-25T10:24:27.897 回答