我正在尝试自动替换文件中的一些版权字符串。字符串是以下格式
"Copyright (C) 2004-2008 by"
但年份可能不同。我尝试在所有文件中找到这一行,并将去年替换为 current.
grep -r ' * Copyright (C) [0-9]\{4\}-[0-9]\{4\} by.' *
现在如何用 2013 替换找到的最后一个组?(想从管道中使用)
我正在尝试自动替换文件中的一些版权字符串。字符串是以下格式
"Copyright (C) 2004-2008 by"
但年份可能不同。我尝试在所有文件中找到这一行,并将去年替换为 current.
grep -r ' * Copyright (C) [0-9]\{4\}-[0-9]\{4\} by.' *
现在如何用 2013 替换找到的最后一个组?(想从管道中使用)
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/'
这就是我想出来回答你的问题:
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”的参数。