使用sed替换文本

时间:2013-05-20 08:43:48

标签: bash sed

我做错了什么?

sed -i 's/** [out :: apple.mango@machine-6.mysite.com]/machine-6/g' file1.csv
Error -: sed: -e expression #1, char 58: Invalid range end

我基本上想用机器6通过bash替换apple.mango@machine-6.mysite.com?

此外,我想为所有机器(其中7台)执行此操作,因此我必须为每个机器单独编写此行,还是可以为所有机器使用相同的替换线?

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:4)

方括号是特殊字符。当你的字面意思是它们时,你需要逃脱它们以及点:

\[out :: apple\.mango@machine-6\.mysite\.com\]

另外,如果你的字面意思是星号,那么也最好逃避它们。

是的,您可以使用seq编写一个循环来运行7个机器号:

for i in $(seq 7); do
    sed -i "s/\*\* \[out :: apple\.mango@machine-$i\.mysite\.com]/machine-$i/g" file1.csv
done

请注意我在这里使用的双引号,作为单引号预先变量扩展。