如何根据目录名更改多个文件的内容?

时间:2015-06-10 19:38:23

标签: regex linux bash

我有几个目录9.[0-9]15,文件file1的内容如下:

#/9.015/file1
blah
9.015 blah
blah 9.01577 blah
blah

我已将此file1复制到所有目录。我想根据它们所在目录的名称从每个目录修改此文件。所以/9.115/file1是:

#/9.115/file1
blah
9.115 blah
blah 9.11577 blah
blah

等等。我知道我必须使用正则表达式组来查找和修改我喜欢的部分,但我不知道如何在使用目录名作为文件的替换时循环通过每个目录的文件

2 个答案:

答案 0 :(得分:2)

试试这个:

for i in 9.[0-9]15/file1 ; do d=`echo $i|sed 's/^\(9\.[0-9]15\).*/\1/'` ; sed -i $i -e "s/9.015/$d/" ; done

在这里,我使用echosed来获取文件名的必要部分。

如下面的评论中提到的@ 4ae1e1,您可以使用参数展开而不是echo + sedd=${i%/*}。有关参数扩展的更多信息,请参阅in documentation

至于我,扩展的语法很难记住:(和恕我直言 ad hoc 一次性单行,可以制作一些“不必要的”叉子。

是的,使用可读变量名称是个好主意。

答案 1 :(得分:0)

感谢我在这里收到的帮助,这就是我做到的。

$ for dir in $(echo *); do cd $dir; sed -i "s/9.015/$dir/g" file1; cd ..; done