如何在查找表达式中使用带有sed的文件名

fed*_*qui 2 bash sed exec find

尝试回答使用Bash/Perl根据每个文件的名称修改文件我结束了一个我不知道如何使用findsed一起使用的点.

假设存在某种文件结构,我们想要更改一行,附加文件名.

如果是正常for循环,我们会这样做:

for file in dir/*
do
   sed -i "s/text/text plus $file/g" $file
done
Run Code Online (Sandbox Code Playgroud)

但是,假设我们想要find用来更改所有子目录中的文件.在这种情况下,我会用...

find . -type f -exec sed -i "s/text/text plus {}/g" {} \;
                                              ^
                                   it does not like this part
Run Code Online (Sandbox Code Playgroud)

但这些{}sed是不能接受的,我得到的错误

sed:-e expression#1,char 20:`s'的未知选项

我发现了一些类似的问题(1),但在这种情况下,我无法将其概括为足以让我理解.

我相信你们会为此提供一个很好的解决方案.谢谢!

小智 6

我真的认为问题是你的文件名包含/这就是为什么sed认为它启动选项字符串.

替换/@你sed命令将完成这项工作.

我尝试在Linux BASH上运行,它完美无缺

find . -type f -exec sed -i -e "s@text@test plus {}@g" {} \;
Run Code Online (Sandbox Code Playgroud)