![](/img/trans.png)
[英]How to read content of a file and then split the content into several files?
[英]How can I change content of several files according to their directory name?
我有几个目录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
等等。 我知道我必须使用正则表达式组来查找和修改我喜欢的部分,但我不知道如何在使用目录名作为文件的替换时循环通过每个目录的文件。
尝试这个:
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
在这里,我使用echo
和sed
来获取文件名的必要部分。
正如下面评论中提到的@ 4ae1e1,您可以使用参数展开而不是echo
+ sed
: d=${i%/*}
。 更多参数扩展看到的文档 。
至于我,扩展的语法很难记住:(和恕我直言, 特别是一次性单行,可以制作一些“不必要的”分叉。
是的,使用可读变量名称是个好主意。
这就是我这样做的原因,感谢我在这里收到的帮助。
$ for dir in $(echo *); do cd $dir; sed -i "s/9.015/$dir/g" file1; cd ..; done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.