我有一个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命令以使其与其余代码一起使用? 有人可以建议吗?
答案 0 :(得分:0)
您不了解转义的工作原理。您需要这样做:
sed -i '/^'"$job_name"':/s/$/':"$creation_date"'/' ...