加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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中的这些{}不被接受,我得到了错误

sed: -e expression #1,char 20: unknown option to `s’

我发现了一些类似的问题(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" {}' ;

我确信可能存在更好的解决方案……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读