使用搜索模式替换字符串

时间:2013-08-12 11:42:54

标签: bash scripting sed awk

我是脚本新手。

目前我遇到了一个问题。

输入字符串:

hw=ABC host=*-0 vrt=se6w
hw=ABC host=*-1 vrt=se6w

必需的输出:

hw=ABC host=SE-0 vrt=se6w
hw=ABC host=SE-1 vrt=se6w

这里*可以是任何值。

  • 表示该值是动态的。我们不知道提前有什么。我只是想替换SE中存在的任何东西。例如:host = xxxx-0,SE-0和

yyyy-1与SE-1。即,“-1/0”之后的值应保持不变....

4 个答案:

答案 0 :(得分:1)

$ cat file
hw=ABC host=*-0 vrt=se6w
hw=ABC host=*-1 vrt=se6w

$ sed 's/\(host=\)[^-]*/\1SE/' file
hw=ABC host=SE-0 vrt=se6w
hw=ABC host=SE-1 vrt=se6w

答案 1 :(得分:0)

sed是你的朋友!要按CFPU-0替换ESPU-0SE-0,您可以写信:

# Create a testfile
sylvain@daal:/tmp$ cat << EOF > testfile
hw=ABC host=CFPU-0 vrt=se6w
hw=ABC host=ESPU-0 vrt=se6w
hw=ABC host=ESPU-1 vrt=se6w
hw=ABC host=XXXX-0 vrt=se6w
EOF

# Perform substitution using sed
sylvain@daal:/tmp$ sed 's/host=\(CFPU\|ESPU\)-0/host=SE-0/' < testfile
hw=ABC host=SE-0 vrt=se6w
hw=ABC host=SE-0 vrt=se6w
hw=ABC host=ESPU-1 vrt=se6w
hw=ABC host=XXXX-0 vrt=se6w

答案 2 :(得分:0)

Pure awk也会做到这一点:

awk -F'=| ' '{print $1"="$2" "$3"="( $4 =="CFPU-0"||$4 =="ESPU-0" ? "SE-0" : $4 )" "$5"="$6}' file

如果字符串存储为变量,则可以执行回显并输出上面的awk命令,如下所示:

echo $variable | awk -F'=| ' '{......}'

答案 3 :(得分:-1)

使用sed输出echo你的字符串并根据你的要求替换模式,如下面的脚本:

x="hw=ABC host=*-0 vrt=se6w
hw=ABC host=*-1 vrt=se6w"
x=`echo $x | sed 's/\*-/SE-/g'`
echo "x : $x"