bash 内の長いファイル リスト内の [tr][tr]{X} を [tr][tr]{\tinyX} に変更しますか?

bash 内の長いファイル リスト内の [tr][tr]{X} を [tr][tr]{\tinyX} に変更しますか?

初心者です。フォルダ内の各ファイルについて、次のシーケンスを置き換える bash スクリプトをプログラムしようとしています。 [tr][tr]{X}ここで、X は任意の 10 進数 (数字と「.」の集合) です [tr][tr]{\tinyX}

何か案は?

ありがとう

答え1

GNU にアクセスできない場合は、 ( GNUが実際に借用した)sed以下も使用できます。perl-ised

find . -type f -exec perl -Tpi -e 's/\Q[tr][tr]{\E\K[\d.]+\}/\\tiny$&/g' {} +

答え2

GNU ではsedグローバル置換パターンを使用しますs/regexp/replacement/g:

sed -i'' 's/\(\[tr\]\[tr\]{\)\([0-9.]\+}\)/\1\\tiny\2/g' /path/to/folder/*

これは、少なくとも 1 つの数字または(括弧式、括弧内の文字に 1 回以上一致する)を含む[tr][tr]{1 つのグループの文字列をキャプチャし、2 番目のグループの閉じ が続くようにし、一致した部分を各行の最初のグループと 2 番目のグループに置き換えます。グループの括弧、リテラル括弧、およびリテラル バックスラッシュは、別のバックスラッシュでエスケープする必要があります。X.[0-9.]\+\+}\tiny()[]+\

これを実行する前に、必ずデータ フォルダをバックアップしてください (または、-i.backの代わりにを使用して-i''、オリジナルを として保持してくださいfilename.back)。

関連情報