何百 (700 以上) の Web フォルダーのセットがあり、それぞれに個別の CSS スタイルシートが含まれています。(興味のある方は、オンラインコースです。)
最近、リンクに下線を付けることが決定されました。W3Cがずっと前にそれを決定したことは知っていますが、これは大学であり、彼らは物事を再決定するのが好きです.
正規表現の検索と置換を使用して、すべての CSS ファイルを更新しようとしています。
これまでの主なハードルは次のとおりです。
- ウィンドウズ。私はそれが好きではありません、私はそれを使用していません。FART のようなコマンド ライン ユーティリティは、単一行の処理には最適ですが、よりカスタマイズされた強力な検索を作成するには多すぎることがわかりました。
マルチライン。CSS ファイルは通常、次のような構造になっています。
a, .surveypopup{ text-decoration:none; cursor:pointer; }
つまり、セレクター ("{" の前の部分) は常にグッズとは別の行にあります。イベント (:hover など) なしで「a」を変更するすべてのセレクターに一致させ、「text-decoration:none」を含むものはすべて「text-decoration:underline」になるようにし、挟まれる可能性のある他のスタイリング コードを台無しにしたくありません。の間に。
- 大文字小文字を区別しません。RegEx の場合、これは問題になりません。この CSS の作成者は、大文字の使用に関して工夫を凝らしているかもしれませんし、そうでないかもしれません。
現在エラーが発生しているコマンドラインは次のとおりです。
find . -iname "*.css" | xargs sed -i "" "s|\(\ba\(,\|\.\|\s\|\b\)\[^\{\]\*\{\[^\}\]\*\)text-decoration\:none|a.\1text-decoration:underline;|g"
生成するもの:
sed: 1: "s|\(\ba\(,\|\.\|\s\|\b\ ...": RE error: invalid repetition count(s)
私のニーズがbashスクリプトを書くことを正当化するかどうか疑問に思っていますか? 変更が必要な場合は、各ファイルのバックアップを作成すると便利です。そのような複数の操作は、スクリプトで簡単になります...
いずれにせよ、sed で何をエスケープし、何をエスケープしないかがわからないため、問題が発生していると思います。
助けてください!