为什么在更新日志中找不到行



我正在尝试bash脚本,并希望编写一个函数,在运行某个命令时可以添加一个新的变更日志项。

给出一个变更日志,用户运行.changelog.sh,并在## [Unreleased]行之后将一个新的变更日志项附加到变更日志中。下面是我的代码。

new_changelog_item()
{   
while read line; do
if [[ $line == "## [Unreleased]"* ]]; then
echo $line
echo "LINE FOUND IN" CHANGELOG.md
sed -i "" "s/$line/## [Unreleased]n## [$version] - $(date '+%Y-%m-%d')n### Addedn - ADD CHANGE HERE!n/g" CHANGELOG.md
return
fi
done < CHANGELOG.md
}

奇怪的是,当我在下面添加一行时,假设<!--TESTING-->,并查找该行而不是## [Unreleased],如果TESTING行之后有新行,则上面的代码相应地工作。如果我在## [Unreleased]之后留下一条新行,它仍然不起作用。

我假设我的代码因为[]而找不到它。如果我删除这些并添加新行,它就可以工作了。有没有一种方法可以让它找到字符串,即使它包含[]?这将是理想的,因为我正在遵循保持更改日志格式。

实际上我在这里找到了一些帮助。

sed替换无法正常工作,因为该行被计算为括号表达式,而不是字符串的一部分。为了解决这个问题,我最终在替换之前创建了这个变量:

newvar=$(<<<"$line" sed 's/[].*[]/\&/g')

然后,我没有在sed语句中使用$line,而是使用了$newvar。代码现在工作正常。

相关内容

  • 没有找到相关文章

最新更新