我正在尝试在输出上运行 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)