bash – 如何在查找表达式中使用带有sed的文件名
发布时间:2020-12-15 18:26:27 所属栏目:安全 来源:网络整理
导读:试图回答 Using Bash/Perl to modify files based on each file’s name我结束了一个我不知道如何使用find和sed all的点. 假设存在某种文件结构,我们想要更改一行,附加文件名. 如果它是循环的正常,我们会这样做: for file in dir/*do sed -i "s/text/text p
试图回答
Using Bash/Perl to modify files based on each file’s name我结束了一个我不知道如何使用find和sed all的点.
假设存在某种文件结构,我们想要更改一行,附加文件名. 如果它是循环的正常,我们会这样做: for file in dir/* do sed -i "s/text/text plus $file/g" $file done 但是,假设我们想使用find来更改所有子目录中的文件.在这种情况下,我会用… find . -type f -exec sed -i "s/text/text plus {}/g" {} ; ^ it does not like this part 但是sed中的这些{}不被接受,我得到了错误
我发现了一些类似的问题(1),但在这种情况下,我无法概括它以使其对我来说是可以理解的. 我相信你们会为此提供一个很好的解决方案.谢谢!
find将返回路径名(相对或绝对),具体取决于您指定的路径.
这会与你指定的分隔符冲突,即/.更改sed的分隔符,你应该是好的: find . -type f -exec sed -i "s|text|text plus {}|g" {} ; 编辑:要从路径中删除前导./,您可以尝试: find . -type f -exec sh -c '$f={}; f=${f/.//}; sed -i "s|text|text plus ${f}|g" {}' ; 我确信可能存在更好的解决方案…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |