2013-04-24 60 views
1

我試圖自動替換文件中的一些版權字符串。字符串是以下格式grep正則表達式,替換文本文件中的具體查找

"Copyright (C) 2004-2008 by" 

但是年限可能不同。我嘗試在所有文件中找到這些行,並用當前版本替換上一年。

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

現在我該如何更換2013年發現的最後一組? (想從管道使用)

回答

3

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

+1,這是sed的工作。 '\ 1'可以從'Copyright..'開始,以節省一些打字。也從這個問題來看,我覺得OP需要'-i'。無論如何,好的答案! – Kent 2013-04-24 16:41:34

+0

@Kent好的,謝謝。至於'-i'標誌:我也會這樣認爲,但是OP注意到:'想從管道使用'。無論如何,現在提到'-i'。 – 2013-04-24 16:43:51

+0

確實,-i保存文件:)非常感謝,這確實是我正在尋找的東西。 – user1797147 2013-04-24 16:58:27

2

這是我想出了回答你的問題:

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

我' m使用@Lev提出的sed查詢,但直接作用於文件。我包含-i將更改保存到文件中。我還在命令行末尾添加了一個「find」,以便sed可以遞歸地查找文件。

請注意所使用的不同類型的報價。前兩個是簡單的引號,但最後兩個是後引號,用於使shell運行「find」命令並將其結果用作參數「sed」。