Regex(sed):如何根据变量形成替换模式?

发布于 2024-12-07 22:13:00 字数 525 浏览 0 评论 0原文

我需要将“.dev”或“.prd”附加到计算机名称,具体取决于它们所在的域。域可以在计算机名称中确定,因为它们都遵循相同的模式:hostd(.. ) 用于开发机器,hostp(..) 用于生产机器。

这是我想要的一个例子:

=============================
| input       | output      |
|=============|=============|
| hostd01     | hostd01.dev |
|-------------|-------------|
| hostp03     | hostp03.prd |
=============================

我是 sed 的新手,所以我不知道我找到的解决方案有多优雅(如下)。 难道没有一种方法可以在一行中完成吗?

sed -e 's/\([dp]\)\(..\)/\1\2.\1/' 
    -e 's/d$/dev/' 
    -e 's/p$/prd/'

I need to append a ".dev" or a ".prd" to a machine name depending on which domain they're in. The domain can be determined in the machine name, since they all follow the same pattern: hostd(..) for dev machines and hostp(..) for production machines.

Here's an example of what I want:

=============================
| input       | output      |
|=============|=============|
| hostd01     | hostd01.dev |
|-------------|-------------|
| hostp03     | hostp03.prd |
=============================

I'm new to sed, so I don't know how elegant is the solution I found (below).
Isn't there a way to do it in one line?

sed -e 's/\([dp]\)\(..\)/\1\2.\1/' 
    -e 's/d$/dev/' 
    -e 's/p$/prd/'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静待花开 2024-12-14 22:13:00
$ sed '/d/{s/$/\.dev/} ; /p/{s/$/\.prv/}' input 
hostd01.dev
hostp03.prv
$ sed '/d/{s/$/\.dev/} ; /p/{s/$/\.prv/}' input 
hostd01.dev
hostp03.prv
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文