您好我尝试在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字符<!-- -->
阻塞了什么?
THX
答案 0 :(得分:0)
您需要使用!
转义\
:
sed "/<\!-- Beginning git log -->/a $log" ~/opt/prime.dropbox/commit.md
答案 1 :(得分:0)
适合我:
$ cat in.txt
some text
<!-- Beginning git log -->
git log output
some text
$ echo $log
[ 2013-08-20 | sergio | git log without -p ] index.html | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) Yes it looks like.
$ sed "/<\!-- Beginning git log -->/a $log" in.txt
some text
<!-- Beginning git log -->
[ 2013-08-20 | sergio | git log without -p ] index.html | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) Yes it looks like.
git log output
some text
答案 2 :(得分:0)
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中,也可以位于您想要的任何位置,并且可以根据需要进行命名。