![将 bash 中的一长串文件中的 [tr][tr]{X} 更改为 [tr][tr]{\tinyX} ?](https://linux22.com/image/164480/%E5%B0%86%20bash%20%E4%B8%AD%E7%9A%84%E4%B8%80%E9%95%BF%E4%B8%B2%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%20%5Btr%5D%5Btr%5D%7BX%7D%20%E6%9B%B4%E6%94%B9%E4%B8%BA%20%5Btr%5D%5Btr%5D%7B%5CtinyX%7D%20%EF%BC%9F.png)
这里是新手。我正在尝试编写一个 bash 脚本,该脚本将为文件夹中的每个文件替换以下序列:
[tr][tr]{X}
其中 X 是任何十进制数(数字和“.”的集合),其中 X 是任何十进制数(数字和“.”的集合)
[tr][tr]{\tinyX}
。
有任何想法吗?
谢谢
答案1
如果您无权访问 GNU sed
,您还可以使用perl
(实际上借用了其-i
GNU 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
)。