正则表达式(sed):如何根据变量形成替换模式?

时间:2011-09-30 22:34:08

标签: regex sed

我需要将“.dev”或“.prd”附加到计算机名称,具体取决于它们所在的域。可以在计算机名称中确定域名,因为它们都遵循相同的模式:hostd (..)用于生产机器的dev机器和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/'

1 个答案:

答案 0 :(得分:2)

$ sed '/d/{s/$/\.dev/} ; /p/{s/$/\.prv/}' input 
hostd01.dev
hostp03.prv