首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sed更改dns日志字符串格式

sed更改dns日志字符串格式
EN

Unix & Linux用户
提问于 2016-03-15 19:50:45
回答 2查看 333关注 0票数 0

我想使用sed来更改以下文本:

代码语言:javascript
复制
(3)www(5)first(3)nth(6)domain(3)com(0)

至:

代码语言:javascript
复制
www.first.nth.domain.com

在圆括号分隔符之间的每个组能否被捕获,然后按照周期分隔符的顺序进行重构,假设存在从2到n+3群(无穷大)?还有别的办法吗?

我已经熟悉:

代码语言:javascript
复制
s/\(\d+\)/./g

但这只会产生:

代码语言:javascript
复制
.www.first.nth.domain.com.
EN

回答 2

Unix & Linux用户

发布于 2016-03-15 20:03:39

这似乎满足了你的要求。我不完全确定您是否希望使用括号中的数字来验证运行长度,但我假设并非如此。

代码语言:javascript
复制
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.com

sed使用三种不同的区域。第一个也是最后一个去掉有界的前导和尾随的(\d+)表达式。中间的那个剥去剩下的。

票数 1
EN

Unix & Linux用户

发布于 2016-03-15 20:34:18

s/\([0-9]+\)/./g; s/^\.|\.$//g怎么样?

您的\d结构不会被某些sed实现所识别。上面是一个Posix扩展正则表达式。你知道,这应该有效。

sed的诀窍就是增量地工作。通过替换括号大小的数字,您得到了大部分的结果;您只是没有意识到,您可以使用第二个正则表达式来清理结果。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/270023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档