我想使用sed来更改以下文本:
(3)www(5)first(3)nth(6)domain(3)com(0)至:
www.first.nth.domain.com在圆括号分隔符之间的每个组能否被捕获,然后按照周期分隔符的顺序进行重构,假设存在从2到n+3群(无穷大)?还有别的办法吗?
我已经熟悉:
s/\(\d+\)/./g但这只会产生:
.www.first.nth.domain.com.发布于 2016-03-15 20:03:39
这似乎满足了你的要求。我不完全确定您是否希望使用括号中的数字来验证运行长度,但我假设并非如此。
echo '(3)www(5)first(3)nth(6)domain(3)com(0)' |
sed -r -e 's/^\([0-9]+\)//' -e 's/(.)\([0-9]+\)(.)/\1.\2/g' -e 's/\([0-9]+\)$//'
www.first.nth.domain.comsed使用三种不同的区域。第一个也是最后一个去掉有界的前导和尾随的(\d+)表达式。中间的那个剥去剩下的。
发布于 2016-03-15 20:34:18
s/\([0-9]+\)/./g; s/^\.|\.$//g怎么样?
您的\d结构不会被某些sed实现所识别。上面是一个Posix扩展正则表达式。你知道,这应该有效。
sed的诀窍就是增量地工作。通过替换括号大小的数字,您得到了大部分的结果;您只是没有意识到,您可以使用第二个正则表达式来清理结果。
https://unix.stackexchange.com/questions/270023
复制相似问题