我試圖自動替換文件中的一些版權字符串。字符串是以下格式grep正則表達式,替換文本文件中的具體查找
"Copyright (C) 2004-2008 by"
但是年限可能不同。我嘗試在所有文件中找到這些行,並用當前版本替換上一年。
grep -r ' * Copyright (C) [0-9]\{4\}-[0-9]\{4\} by.' *
現在我該如何更換2013年發現的最後一組? (想從管道使用)
我試圖自動替換文件中的一些版權字符串。字符串是以下格式grep正則表達式,替換文本文件中的具體查找
"Copyright (C) 2004-2008 by"
但是年限可能不同。我嘗試在所有文件中找到這些行,並用當前版本替換上一年。
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`
我' m使用@Lev提出的sed查詢,但直接作用於文件。我包含-i將更改保存到文件中。我還在命令行末尾添加了一個「find」,以便sed可以遞歸地查找文件。
請注意所使用的不同類型的報價。前兩個是簡單的引號,但最後兩個是後引號,用於使shell運行「find」命令並將其結果用作參數「sed」。
+1,這是sed的工作。 '\ 1'可以從'Copyright..'開始,以節省一些打字。也從這個問題來看,我覺得OP需要'-i'。無論如何,好的答案! – Kent 2013-04-24 16:41:34
@Kent好的,謝謝。至於'-i'標誌:我也會這樣認爲,但是OP注意到:'想從管道使用'。無論如何,現在提到'-i'。 – 2013-04-24 16:43:51
確實,-i保存文件:)非常感謝,這確實是我正在尋找的東西。 – user1797147 2013-04-24 16:58:27