grep regex,替换文本文件中的特定查找

时间:2013-04-24 16:31:35

标签: grep

我正在尝试自动替换文件中的某些版权字符串。字符串格式为

"Copyright (C) 2004-2008 by"

但是年份可能会有所不同。我尝试在所有文件中找到这一行,并用当前文件替换去年。

grep -r ' * Copyright (C) [0-9]\{4\}-[0-9]\{4\} by.' *

现在我如何替换2013年发现的最后一组? (想从管道中使用)

2 个答案:

答案 0 :(得分:5)

grep不做替换。您可以尝试sed,例如:

sed 's/Copyright (C) \([0-9]\{4\}\)-[0-9]\{4\} by/Copyright (C) \1-2013 by/'

或肯特注意到:

sed 's/\(Copyright (C) [0-9]\{4\}\)-[0-9]\{4\} by/\1-2013 by/'

ssed

ssed -R 's/(?<=Copyright \(C\) )([0-9]{4})-[0-9]{4}(?= by)/\1-2013/'

答案 1 :(得分:2)

这就是我想出来回答你的问题:

sed -i 's/Copyright (C) \([0-9]\{4\}\)-[0-9]\{4\} by/Copyright (C) \1-2013 by/' `find -type f`

我正在使用@Lev提出的sed查询,但直接对文件进行操作。我包含了-i来保存对文件的更改。我还在命令行的末尾包含了一个“find”,以便sed以递归方式查找文件。

请注意使用的不同类型的报价。前两个是简单的引号,但最后两个是后引号,用于使shell运行“find”命令并将其结果用作“sed”的参数。