1

我究竟做错了什么?

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

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

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

任何帮助表示赞赏

4

1 回答 1

4

方括号是特殊字符。当您从字面上理解它们时,您需要转义它们以及点:

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

此外,如果您的意思是字面意义上的星号,最好也避开它们。

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

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

请注意我在这里使用的双引号,因为单引号可以防止变量扩展。

于 2013-05-20T08:46:03.877 回答