为什么我不能使用sed用变量替换word?

时间:2014-09-09 03:20:37

标签: regex bash sed

如何使用sed替换文件中的字符串? 这是我的代码:

inac=`echo "\#$minute\ $hour\ $date\ $month\ $day\ $cron_user\ $comm"`
actv=`echo "$minute\ $hour\ $date\ $month\ $day\ $cron_user\ $comm"`

if [[ $stat == "active" ]]; then
     sed -i "s/^.${inac}/${actv}/" filecron
     active
     echo "input data active to filecron"

fi

我尝试过:

sed -i 's/"#all all all all all root bash /media/data/looping.sh > /dev/null 2>&1"/"all all all all all root bash /media/data/looping.sh > /dev/null 2>&1"/' filecron

重点是,我只想删除"#"如果stat值有效则签名。如果有更好的选择而不是使用sed,我会很高兴。 抱歉英文不好。

1 个答案:

答案 0 :(得分:1)

您的代码看起来像是在做各种不必要的事情。我假设你在filecron中有一个注释掉的行:

#all all all all all root bash /media/data/looping.sh > /dev/null 2>&1

如果您要删除filecron中的所有#,则应该只需要这样:

if [[ $stat == "active" ]]; then
     sed -i '' 's/#//g' filecron
     active
     echo "input data active to filecron"
fi

警告:-i ''执行就地编辑而没有备份,因此应谨慎行事。如果要进行备份,则代替''指定文件名。