我做错了什么?
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台)执行此操作,因此我必须为每个机器单独编写此行,还是可以为所有机器使用相同的替换线?
任何帮助表示赞赏
答案 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
请注意我在这里使用的双引号,作为单引号预先变量扩展。