bash脚本中的单词替换

时间:2018-08-24 09:44:29

标签: unix sed

我有一个sed命令,该命令在文本文件中查找特定单词以进行模式匹配,然后在包含该特定单词的行的末尾附加一个日期。 这是代码块

some_function() {
        while IFS=: read -r jname state; do
                echo "the job is $name"
                if [[ -n ${name} ]]
                then
                //code to get creation date which works fine
                creation_date="00-00-00_00-00-00"
                sed -i '/^'$job_name':/s/$/':$creation_date'/' $logs_folder/job_state.$today
                fi
        done <"$logs_folder/job_state.$today"
}

一切正常,直到sed命令为止。该命令不适用于某些名称,例如ARCHIVE-REQUEST - New, ARCHIVE-REQUEST - rss_master sed命令引发错误

sed -i '/^ARCHIVE-REQUEST' - 'rss_master:/s/$/:00-00-00_00-00-00/' file.txt
sed: -e expression #1, char 17: unterminated address regex

并且也不能转义这些名称,因为从中获取这些名称的文件还具有其他与sed命令一起使用的定界符,并且由于该文件是动态生成的,因此无法在sed中使用硬代码定界符命令

这是我的示例文件

aggressive_cleanup_wrapper_M3
aggressive_cleanup_wrapper_M5
aggressive_cleanup_wrapper_others
aggressive_cleanup_wrapper_R720
ARCHIVE-REQUEST - Approval Pending
ARCHIVE-REQUEST - Archive
ARCHIVE-REQUEST - Lock Period
ARCHIVE-REQUEST - New
ARCHIVE-REQUEST - rss_master

如何修改sed命令以使其与其余代码一起使用? 有人可以建议吗?

1 个答案:

答案 0 :(得分:0)

您不了解转义的工作原理。您需要这样做:

sed -i '/^'"$job_name"':/s/$/':"$creation_date"'/' ...