fed*_*qui 2 bash sed exec find
尝试回答使用Bash/Perl根据每个文件的名称修改文件我结束了一个我不知道如何使用find和sed一起使用的点.
假设存在某种文件结构,我们想要更改一行,附加文件名.
如果是正常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)