嗨,我尝试在Bash脚本中使用Sed,但遇到了一个问题。(我对这两个脚本都是新手)
我尝试在标志<!-- Beginning git log -->
之后插入$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
因此,在www.example.com中commit.md我将输入:
some text
<!-- Beginning git log -->
git log output
some text
我已经尝试了所有可能的单/双引号技巧,..或者也许只有所有错误的。
这是我经常遇到的错误。
sed: -e expression #1, char 102: unknown command: `f'
我知道awk应该有更简单的方法,但我已经很接近了。
也许是Html字符<!-- -->
阻塞了什么?
谢谢
4条答案
按热度按时间2g32fytz1#
sed是一个非常好的工具,用于在一行中进行简单的替换,但是对于其他任何内容,只需使用awk:
要在shell中运行命令并使用该命令输出安全地覆盖原始文件,请执行以下操作:
在这种情况下:
临时文件可以在您的工作目录、$HOME、/usr/tmp或任何您想要的位置,并且可以随意命名。
uwopmtnx2#
你需要用
\
来逃避!
:yk9xbfzb3#
适合我:
gg0vcinb4#
遇到了一个类似的问题,你和以下工作对我来说。
已使用示例数据初始化日志变量和commit.md:
我无法让sed“a”(append text)命令在一个合理的sed one liner上工作,因为它不会转义变量上的换行符。因此,多行字符串变量将以一个长行结束,并用空格替换换行符。例如:
但是我可以使用sed“r”(append text read from filename)命令并将变量当作文件来处理,这样多行字符串变量就可以正确地打印换行符。
解决方法:
这将输出:
或者,如果您希望在www.example.com上进行更改commit.md,请将
-i
标志添加到sed,如下所示:输出量: