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