在大写字符前插入句号

Insert period before uppercase characters

我有文件要更改名称。

示例:

HawaiiFive02010SXXEXXW.ac3
Nashville2012SXXEXXW.ac3
HowToGetAwayWithMurderSXXEXXW.ac3
BetterCallSaulSXXEXXW.ac3
BeautyAndTheBeast2012SXXEXXW.ac3

我需要转换它们:

Nashville.2012.SXXEXX.W.ac3
How.To.Get.Away.With.Murder.SXXEXX.W.ac3
Better.Call.Saul.SXXEXX.W.ac3
Beauty.And.The.Beast.2012.SXXEXX.W.ac3
Hawaii.Five.0.2010.SXXEXX.W.ac3

我找到了这个:

echo Nashville2012SXXEXXW.ac3 | sed 's/[A-Z]/.&/g;s/^.//'
Nashville2012.SXX.EXX.W.ac3
echo HowToGetAwayWithMurderSXXEXXW.ac3 | sed 's/[A-Z]/.&/g;s/^.//'
How.To.Get.Away.With.Murder.SXX.EXX.W.ac3

如果无法更改文件名,我会自己命名。我只是想知道这是否有可能找到一种方法,但如果它太复杂,我会花钱,因为脚本的其余部分有效:)

使用 GNU sed :

sed -r 's/([A-Z][^A-Z.]+)/./g;s/[0-9]{4}/.&/g;s/([0-9])([0-9]{4})[^$]/../;s/SXXEXXW/SXXEXX.W/;s/(S[0-9][0-9])\.//'

示例:

$ echo Nashville2012SXXEXXW.ac3 | sed -r 's/([A-Z][^A-Z.]+)/./g;s/[0-9]{4}/.&/g;s/([0-9])([0-9]{4})[^$]/../;s/SXXEXXW/SXXEXX.W/;s/(S[0-9][0-9])\.//'
Nashville.2012.SXXEXX.W.ac3

$ echo HowToGetAwayWithMurderSXXEXXW.ac3 | sed -r 's/([A-Z][^A-Z.]+)/./g;s/[0-9]{4}/.&/g;s/([0-9])([0-9]{4})[^$]/../;s/SXXEXXW/SXXEXX.W/;s/(S[0-9][0-9])\.//'
How.To.Get.Away.With.Murder.SXXEXX.W.ac3

$ echo HawaiiFive02010S03E08W.ac3 | sed -r 's/([A-Z][^A-Z.]+)/./g;s/[0-9]{4}/.&/g;s/([0-9])([0-9]{4})[^$]/../;s/SXXEXXW/SXXEXX.W/;s/(S[0-9][0-9])\.//'
Hawaii.Five.0.2010.S03E08.W.ac3