【发布时间】:2015-05-02 03:24:42
【问题描述】:
我阅读了以下文章“Using grep and sed to find and replace a string”,但如何将其扩展为链接多个 grep。例如我有以下目录/文件结构
dir1/metadata.txt
dir2/metadata.txt
dir1/metadata.txt 有
filename1 '= 1.0.0'
filename2 '= 1.0.0'
dir2/metadata.txt 有
filename1 '= 1.0.0'
long_filename '= 1.0.0'
也就是说,dir1/metadata.txt 和 dir2/metadata.txt 都包含“filename '1.0.0'”,但是每个文件中“filename”和“'1.0.0'”之间的空格是不同的.
现在我想在所有 metadata.txt 文件中将 filename1 的关联版本替换为“2.0.0”,因此生成的文件看起来像...
dir1/metadata.txt 有
filename1 '= 2.0.0'
filename2 '= 1.0.0'
dir2/metadata.txt 有
filename1 '= 2.0.0'
long_filename '= 1.0.0'
我在努力
find . -name metadata.txt | xargs grep filename1 | sed -i "s/1\.0\.0/2.0.0/g" <some option here>
但我知道“这里的一些选项”部分。有什么线索吗?
【问题讨论】:
-
您需要更改所有
*filename*(例如filename2和long_filename)还是只更改filename1? -
tivn:只有文件名 1。 filename2 和 long_filename 保持不变
-
庇护所:你的命令只会改变一个文件
-
sed 不能对字符串进行操作,但请参阅stackoverflow.com/questions/29613304/… 以获得解决方法。
-
@EdMorton:总体来说不错,但这里的问题不是如何一般地用
sed替换字符串,而是如何将find与sed结合起来(使用 specific 搜索和替换字符串,OP 已经为其提供了所需的转义)。