考虑一个简单的 sed 脚本foo-to-bar.sed
:
s/foo/bar/
Run Code Online (Sandbox Code Playgroud)
和简单的调用:
sed -f foo-to-bar.sed some-file.txt
Run Code Online (Sandbox Code Playgroud)
现在,假设我想自定义替换字符串(在本例中为 bar)并将其作为参数传递给 sed 脚本。那可能吗?
注意:我知道我可以摆脱 sed 脚本并使用内联 shell 变量。我对将参数传递到 sed 脚本特别感兴趣。我在文档中找不到任何东西,但我仍然希望我遗漏了一些东西。
由于似乎确实无法传递参数,因此我能想到的最佳解决方法是使用从命令行替换的中间占位符。foo-to-bar.sed
:
s/foo/#ARG1#/
Run Code Online (Sandbox Code Playgroud)
调用:
sed -f foo-to-bar.sed -e "s/#ARG1#/bar/g" some-file.txt
Run Code Online (Sandbox Code Playgroud)
说明:foo
首先替换为#ARG1#
,然后替换bar
为从命令行传递的。请注意,有-e
after很重要-f
。分隔符也没有什么特别的#
,使用通常不会出现在文件中的任何内容。