2

ファイル内の著作権文字列を自動的に置き換えようとしています。文字列は次の形式です

"Copyright (C) 2004-2008 by"

しかし、年は異なる場合があります。すべてのファイルでこの行を見つけて、昨年を現在のものに置き換えようとします。

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 が再帰的にファイルを検索できるように、コマンド ラインの最後に「検索」を含めました。

使用される引用符の種類に注意してください。最初の 2 つは単純な引用符ですが、最後の 2 つは逆引用符で、シェルに「find」コマンドを実行させ、その結果を「sed」のパラメーターとして使用するために使用されます。

于 2013-04-24T17:25:13.423 に答える