使用" {}"和" \;"在sed命令中

时间:2016-02-29 23:24:30

标签: linux bash sed

我一直在谷歌搜索这个,但是虽然我看到有人使用它们,但我没有看到它的解释。我也尝试过找到并发现"搜索,但再次没有解释这些。 sed man和其他sed指南也没有包含它。

现在,我使用find命令查找多个文件,然后使用sed替换文件中的字符串。我相信这些" {}"和" \;"在sed的末尾是允许sed从查找中获取每个文件名并搜索其文本的内容。但我不想猜测并确切知道它们是什么以及为什么它们会在那里。这是我目前的命令:

output=$(find . -type f -name '*.h' -o -name '*.C' -o -name '*.cpp' -o -name "*.cc" -exec sed -n -i "s/ARG2/ARG3/g" {} \;)

我还担心&#34 ;;"最后可能没有必要,因为我也将它包装起来并将其扔进变量中。有人可以澄清那些曲线和反斜杠在做什么以及我是否需要它们?

编辑:事实证明,他们是find -exec的属性,而不是sed。所以我一直在寻找错误的地方。谢谢!

1 个答案:

答案 0 :(得分:3)

find有两个版本的-exec操作:

-exec ... {} +

...运行命令...,最后在结果中添加尽可能多的文件名。

-exec ... {} ';'

...每找到一个文件运行一次...命令,替换文件名取代{} sigil;在这种用法中,并非强制要求该行的末尾。

因此,+;需要作为文字参数传递给find,以使其接受有效的操作。