2

我正在尝试自动替换文件中的一些版权字符串。字符串是以下格式

"Copyright (C) 2004-2008 by"

但年份可能不同。我尝试在所有文件中找到这一行,并将去年替换为 current.

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

现在如何用 2013 替换找到的最后一个组?(想从管道中使用)

4

2 回答 2

9

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/'
于 2013-04-24T16:38:03.987 回答
4

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

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

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

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

于 2013-04-24T17:25:13.423 回答