今天使用sed命令修改/etc/profile文件的时候,发现传入参数无法实现功能老是报错。
实例:
chwd(){
sed -i 's/^wk.*/wk=$1/' /etc/profile
}
解决方法:将单引号修改成双引号才能使得参数生效,修改后如下:
chwd(){
sed -i "s/^wk.*/wk=$1/" /etc/profile
}
但是一波未平一波又起,我发现我传入的参数是 aa时可以正常使用,但是传入的时路径时就老实报错:
sed: -e expression #1, char 18: unterminated `s' command
于是我把传入的参数“/”进行转换
aa=$(echo $1 | sed 's/\//\\\//g')
得到如下方法,发着就很烦,要转换显得很累赘。
chwd2(){
aa=$(echo $1 | sed 's/\//\\\//g')
echo aa:$aa
sed -i "s/^wk.*/wk=$aa/" /etc/profile
}
我也想着把这行删除,然后从新加一行,我要是一开始想到,我也不会折腾这么久,我估计也就不会得到最后这个完美的结果。
最后我想到这个分割符好像是可以换的,嘿嘿码上试了一下得到如下结果:
chwd(){
sed -i "s#^wk.*#wk=$1#" /etc/profile
}
一行搞定
------- the end