是否可以将参数传递给 sed 脚本?

Bog*_*mac 5 sed

考虑一个简单的 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 脚本特别感兴趣。我在文档中找不到任何东西,但我仍然希望我遗漏了一些东西。

Bog*_*mac 5

由于似乎确实无法传递参数,因此我能想到的最佳解决方法是使用从命令行替换的中间占位符。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为从命令行传递的。请注意,有-eafter很重要-f。分隔符也没有什么特别的#,使用通常不会出现在文件中的任何内容。

  • 如果 `foo` 在 `some-file.txt` 中出现 10.000 次,这将运行 10.000 次额外的替换。你最好改变脚本: `sed 's/#ARG1#/bar/' foo-to-bar.sed | sed -f - 某些文件.txt` (3认同)