将 bash 中的一长串文件中的 [tr][tr]{X} 更改为 [tr][tr]{\tinyX} ?

将 bash 中的一长串文件中的 [tr][tr]{X} 更改为 [tr][tr]{\tinyX} ?

这里是新手。我正在尝试编写一个 bash 脚本,该脚本将为文件夹中的每个文件替换以下序列: [tr][tr]{X}其中 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

GNUsed使用全局替换模式s/regexp/replacement/g

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

这捕获一组中的字符串[tr][tr]{X包含至少一个数字或.(括号表达式[0-9.]\+\+匹配括号内的字符一次或多次),然后}在第二组中结束,并用第一组替换匹配的部分,\tiny并且每行第二组。()组的括号、文字方括号[]+文字反斜杠\需要用另一个反斜杠转义。

确保在运行此程序之前备份您的数据文件夹(或使用-i.back而不是-i''将原始文件保留为filename.back)。

相关内容