使用sed在模式后插入变量

用户名

嗨,我尝试在Bash脚本中使用Sed,但遇到了问题。(我都是他们的新手)

我正在尝试$log在标志后插入<!-- Beginning git log -->

#!/bin/bash
log=`git log -1 --stat --date=short --pretty=format:'[ %cd | %an | %s ]'`
sed "/<!-- Beginning git log -->/a $log" ~/opt/prime.dropbox/commit.md

因此,在commit.md中,我将拥有:

some text
<!-- Beginning git log -->
git log output
some text

我尝试了所有可能的单引号/双引号技巧,..或仅尝试了所有错误的技巧。

这是我大部分时间遇到的错误。

sed: -e expression #1, char 102: unknown command: `f'

我知道用awk应该有一种更简单的方法,但是我很亲近。^^

可能是HTML字符<!-- -->阻塞了还是什么?

谢谢

埃德·莫顿

sed是用于在单行上进行简单替换的出色工具,但是对于其他任何东西,只需使用awk即可:

awk -v gitlog="$log" '{print} /<!-- Beginning git log -->/{print gitlog}' ~/opt/prime.dropbox/commit.md

要在shell中运行命令并使用该命令输出安全地覆盖原始文件,请执行以下操作:

the_command orig_file > /usr/tmp/tmp$$ && mv /usr/tmp/tmp$$ orig_file

在这种情况下:

awk -v gitlog="$log" '{print} /<!-- Beginning git log -->/{print gitlog}' ~/opt/prime.dropbox/commit.md > /usr/tmp/tmp$$ &&
mv /usr/tmp/tmp$$ ~/opt/prime.dropbox/commit.md

临时文件可以在您的工作目录中,也可以在$ HOME或/ usr / tmp中,也可以位于您想要的任何位置,并且可以命名为任意名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章