我们有一个进程可以使用包含sed命令的文件来改变管道输入.
我需要用变量值替换输入中的占位符,例如在-e我可以运行的单一类型的命令中;
$ echo "Today is XX" | sed -e "s/XX/$(date +%F)/"
Today is 2012-10-11
Run Code Online (Sandbox Code Playgroud)
但是我只能sed在文件中指定方面(然后将进程指向文件),例如,一个名为的文件replacements.sed可能包含;
s/XX/Thursday/
Run Code Online (Sandbox Code Playgroud)
很明显;
$ echo "Today is XX" | sed -f replacements.sed
Today is Thursday
Run Code Online (Sandbox Code Playgroud)
但是,如果我想使用环境变量或shell值,我找不到一种方法来扩展它,例如if replacements.txtcontains;
s/XX/$(date +%F)/
Run Code Online (Sandbox Code Playgroud)
然后;
$ echo "Today is XX" | sed -f replacements.sed
Today is $(date +%F)
Run Code Online (Sandbox Code Playgroud)
在文件的文本中包含双引号只打印双引号.
有谁知道一种方法可以在sed文件中使用变量?
这可能适合你(GNU sed):
cat <<\! > replacements.sed
/XX/{s//'"$(date +%F)"'/;s/.*/echo '&'/e}
!
echo "Today is XX" | sed -f replacements.sed
Run Code Online (Sandbox Code Playgroud)
如果您没有GNU sed,请尝试:
cat <<\! > replacements.sed
/XX/{
s//'"$(date +%F)"'/
s/.*/echo '&'/
}
!
echo "Today is XX" | sed -f replacements.sed | sh
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5697 次 |
| 最近记录: |