【问题标题】:Why I can't replace word with variable using sed?为什么我不能使用 sed 用变量替换单词?
【发布时间】:2014-09-09 12:11:10
【问题描述】:

如何使用 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

关键是,如果统计值处于活动状态,我只想删除“#”号。如果有更好的选择而不是使用 sed,我会很高兴。 抱歉英语不好。

【问题讨论】:

  • $stat 是从哪里来的,如果是inactive,您不会将其设置为active 吗?
  • $stat 来自数据库。我只想删除 # where 数据库中的记录处于活动状态。
  • 如果您只想添加/删除前导 #,然后编写您的模式来执行此操作。不要像那样替换(和匹配)整行。它只会使事情复杂化和混淆。
  • 噢,如果让您感到困惑,我很抱歉。我对 sed 不是很熟悉。

标签: regex bash sed


【解决方案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 '' 在没有备份的情况下进行就地编辑,因此应谨慎行事。如果要进行备份,请指定文件名而不是 ''

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 2019-05-16
    • 2021-05-21
    • 2011-12-02
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多