![將 bash 中的一長串檔案中的 [tr][tr]{X} 改為 [tr][tr]{\tinyX} ?](https://rvso.com/image/164480/%E5%B0%87%20bash%20%E4%B8%AD%E7%9A%84%E4%B8%80%E9%95%B7%E4%B8%B2%E6%AA%94%E6%A1%88%E4%B8%AD%E7%9A%84%20%5Btr%5D%5Btr%5D%7BX%7D%20%E6%94%B9%E7%82%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
)。