如何对所有匹配的文件使用 sed?

如何对所有匹配的文件使用 sed?

我正在尝试在输出上运行 sedfind | grep \.ext$
但是,sed 需要输入文件和输出文件。
如何将输出行保存到变量,或将其传递给 sed?

答案1

这不是真的,sed也不是要求一个输入文件。

Sed 是一个流编辑器 [...],用于在输入流(一个文件)上执行基本的文本转换或来自管道的输入)。 (通过

但就您而言,您想要操作文件,而不是流,所以是的,您需要它。


这里不需要grep,你可以使用find -name "*.ext".如果您随后想要sed对已找到的所有文件运行,请使用find -exec对已找到的任何文件执行命令。

find -name "*.ext" -exec sed -i '...' {} \;

如果出于任何原因您想使用来自的文件名grep(例如您的输入不是来自find),您可以使用xargs

grep \.ext$ list_of_files | xargs -I{} sed -i '...' {}

答案2

您可以sed与多个输入文件一起使用:

sed 'what/you/wanna/do' file1 file2 file3
sed 'what/you/wanna/do' file*
sed 'what/you/wanna/do' *.txt
sed 'what/you/wanna/do' $(find | grep \.ext)

要保存更改,而不是在标准输出上打印它们,请使用选项-i(就地):

sed -i 'what/you/wanna/do' $(find | grep \.ext)

相关内容