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

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

给出以下 find 命令:find . | xargs grep 'userTools' -sl

我如何使用该命令的结果进行 sed?

输出:

./file1.ext
./file2.ext
./file3.ext

答案1

我假设您想要sed对每个文件的内容而不是文件名列表执行某些操作,因为您似乎已经知道如何执行此操作。答案在一定程度上取决于sed您可用的版本。如果它支持-i选项(就地编辑文件),您可以xargs再次使用,如下所示:

find . | xargs grep 'userTools' -sl | xargs -L1 sed -i 's/this/that/g'

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

find . | xargs grep 'userTools' -sl | while read file
do
sed 's/this/that/g' "$file" > tmpfile
mv tmpfile "$file"
done

答案2

find \Path_where_files_are -type f -name 'file_type' -exec  sed -e 's/"text_to_be_changed"/"text_to_be_changed_to"/' {} +

答案3

find . -print0 | xargs -0 grep -slZ 'userTools' | xargs -0 sed -i 's/foo/bar/'

或者

find . -print0 | xargs -0 sed -i '/userTools/ s/foo/bar/'

或者

ack -l --print0 'userTools' | xargs -0 sed -i 's/foo/bar/'

相关内容