读一本关于 bash 的书,它介绍了正则表达式(我对它们还很陌生)并举了一个例子:
rename -n 's/(.*)(.*)/new$1$2/' *
'file1' would be renamed to 'newfile1'
'file2' would be renamed to 'newfile2'
'file3' would be renamed to 'newfile3'
不幸的是,这个例子并没有提供真正的分割。我有点了解捕获组是什么,并且 .* 是贪婪的并且会匹配所有字符,但我不确定为什么需要两个捕获组。另外,我知道 $ 代表行尾,但不确定 $1$2 在这里实际上在做什么。感谢您提供的任何见解。
尝试研究捕获组和 $ 来获取一些类似的示例并进行解释,但结果不佳。
最佳答案
你是对的。 (.*)(.*)
毫无意义。第二个 .*
将始终匹配空字符串。
例如,匹配文件
,
- 第一个
.*
将匹配从位置 0 开始的 4 个字符的字符串(file
),并且 - 第二个
.*
将匹配从位置 4 开始的 0 字符串(空字符串)。
您可以将模式简化为
rename -n 's/(.*)/new$1/' *
rename -n 's/.*/new$&/' *
rename -n 's/^/new/' *
rename -n '$_ = "new$_"' *
rename -n '$_ = "new" . $_' *
关于bash - 正则表达式、捕获组和美元符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74501916/