![bash 内の長いファイル リスト内の [tr][tr]{X} を [tr][tr]{\tinyX} に変更しますか?](https://rvso.com/image/164480/bash%20%E5%86%85%E3%81%AE%E9%95%B7%E3%81%84%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%20%E3%83%AA%E3%82%B9%E3%83%88%E5%86%85%E3%81%AE%20%5Btr%5D%5Btr%5D%7BX%7D%20%E3%82%92%20%5Btr%5D%5Btr%5D%7B%5CtinyX%7D%20%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
初心者です。フォルダ内の各ファイルについて、次のシーケンスを置き換える bash スクリプトをプログラムしようとしています。
[tr][tr]{X}
ここで、X は任意の 10 進数 (数字と「.」の集合) です
[tr][tr]{\tinyX}
。
何か案は?
ありがとう
答え1
GNU にアクセスできない場合は、 ( GNUが実際に借用した)sed
以下も使用できます。perl
-i
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 つの数字または(括弧式、括弧内の文字に 1 回以上一致する)を含む[tr][tr]{
1 つのグループの文字列をキャプチャし、2 番目のグループの閉じ が続くようにし、一致した部分を各行の最初のグループと 2 番目のグループに置き換えます。グループの括弧、リテラル括弧、およびリテラル バックスラッシュは、別のバックスラッシュでエスケープする必要があります。X
.
[0-9.]\+
\+
}
\tiny
()
[]
+
\
これを実行する前に、必ずデータ フォルダをバックアップしてください (または、-i.back
の代わりにを使用して-i''
、オリジナルを として保持してくださいfilename.back
)。