使用 sed 替换来自 find 的文件列表中的文本

Kyl*_*yes 2 sed find

鉴于以下 find 命令: find 。| xargs grep 'userTools' -sl

如何在该命令的结果上使用 sed?

输出:

./file1.ext
./file2.ext
./file3.ext
Run Code Online (Sandbox Code Playgroud)

gar*_*ohn 5

我假设您想对sed每个文件的内容而不是文件名列表执行一些操作,因为您似乎已经知道如何执行该操作。答案部分取决于sed您可用的版本。如果它支持该-i选项(就地编辑文件),您可以xargs像这样再次使用:

find . | xargs grep 'userTools' -sl | xargs -L1 sed -i 's/this/that/g'
Run Code Online (Sandbox Code Playgroud)

如果你sed没有这个-i选项,你可以这样做:

find . | xargs grep 'userTools' -sl | while read file
do
sed 's/this/that/g' "$file" > tmpfile
mv tmpfile "$file"
done
Run Code Online (Sandbox Code Playgroud)