1

sed を使用して単純な正規表現を実行する際に問題が発生しています。

SQLファイルでいくつかの置換を行う必要があり、sedを使用しようとしています.

一部のリンクの URL を置き換える必要があります。リンクは次の形式です。

www。site1.com/blog/2012/12/12 _

すべてのリンクでsite1site2に置き換えたいと思います。

これらのリンクを見つけるために、次の正規表現を作成しました。

(site1.com)\/blog\/\d{4}\/\d{2}\/\d{2}

そして、適切に機能するようです。

sed を使用して置換を行う 次のコードを作成しました

cat back.sql | sed 's:(site1.com)\/blog\/\d{4}\/\d{2}\/\d{2}:site2.com:' > fixed.sql

しかし、それは機能していないようです..

4

2 に答える 2

5

sed\d(少なくとも私の知る限りでは) サポートして{4}おらず、拡張正規表現のみをサポートしています。

sed -r 's:site1.com(/blog/[0-9]{4}/[0-9]{2}/[0-9]{2}):site2.com/\1:'

基本的な正規表現として (多くのエスケープが必要です):

sed 's:site1.com\(/blog/[0-9]\{4\}/[0-9]\{2\}/[0-9]\{2\}\):site2.com/\1:'

ps。別の区切り記号を使用する場合は、スラッシュをエスケープする必要はありません ( :)

于 2012-04-05T11:11:07.140 に答える
0

私にはまっすぐな代用のように見えます:

$ sed -i s/\.site1\./\.site2\./g afile.txt

...afile.txtサイトのリストが含まれています。

別のファイルに出力する場合は、 を削除し、-iを使用して出力をリダイレクトします>

于 2012-04-05T11:10:32.507 に答える