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

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

ここで初心者です。フォルダ内のすべてのファイルに対して、次の順序を置き換えるbashスクリプトを作成しようとしています。 [tr][tr]{X}ここで、Xは小数(数値セットと「.」)、ここで「コレクション」です [tr][tr]{\tinyX}

どんなアイデアがありますか?

ありがとう

答え1

GNUにアクセスできない場合は、sed次のものを使用することもできますperl(実際には-iGNUから借りたsed)。

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セットの文字列をキャプチャ[tr][tr]{し、X1つ以上の数字または(角かっこ内の文字と1回以上一致する角括弧式)を含み、.2番目のセットで終わり、一致する部分を最初のセットに置き換えます。 2番目のグループライン。グループ括弧、リテラル角括弧、およびリテラルバックスラッシュは、他のバックスラッシュを使用してエスケープする必要があります。[0-9.]\+\+}\tiny()[]+\

このプログラムを実行する前に、必ずデータフォルダをバックアップしてください(または元のファイルを保存する-i.back代わりに使用してください)。-i''filename.back

関連情報