正则表达式 - 使用 prefix/suffix 重命名文件
Regex - Renaming files with a prefix/suffix
下面的命令来自这个答案:
该命令添加单词 new.
作为前缀。明白了。
rename 's/(.*)$/new./' original.filename
但是,我想问一下为什么这里需要左括号和右括号:
(.*)
还有为什么 </code> 是存储原始文件名的变量,为什么我不能用下面的方法做同样的事情(我用 <code>
替换了 </code> ):</p>
<pre><code>rename 's/(.*)$/new./' original.filename
我对 bash 还是比较陌生,所以非常感谢帮助。
首先,(.*)$
就是所谓的 正则表达式 (或正则表达式)。正则表达式用于根据某些规则匹配文本。
例如,.*
匹配零个或多个字符。 $
匹配行尾。因为默认情况下正则表达式是贪婪的,所以 .*$
匹配整行(尽管正是因为正则表达式是贪婪的,所以 $
是多余的)。
However, I'd like to ask why the open and close brackets are required here: (.*)
圆括号表示组。分组用于"save"匹配文本的内容,方便以后使用。
And also why is </code> the variable which stores the original file name, why can't I do the the same with following (where I have replaced <code>
with </code>): ...</p>
</blockquote>
<p>如<code>rename(1)
,第一组存入</code>,第二组存入<code>
,以此类推。例如,下面的正则表达式:
(a)(b)(c)
将单个 a
存储到 </code>,将单个 <code>b
存储到 </code> 等等。</p>
<p>你只有一组,所以你必须使用<code>
。 </code>、<code>
、...等标记将为空。
最后但同样重要的是,您可以使用更短的等效命令:
rename 's/^/new./'
这里^
表示字符串的开始
下面的命令来自这个答案:
该命令添加单词 new.
作为前缀。明白了。
rename 's/(.*)$/new./' original.filename
但是,我想问一下为什么这里需要左括号和右括号:
(.*)
还有为什么 </code> 是存储原始文件名的变量,为什么我不能用下面的方法做同样的事情(我用 <code>
替换了 </code> ):</p>
<pre><code>rename 's/(.*)$/new./' original.filename
我对 bash 还是比较陌生,所以非常感谢帮助。
首先,(.*)$
就是所谓的 正则表达式 (或正则表达式)。正则表达式用于根据某些规则匹配文本。
例如,.*
匹配零个或多个字符。 $
匹配行尾。因为默认情况下正则表达式是贪婪的,所以 .*$
匹配整行(尽管正是因为正则表达式是贪婪的,所以 $
是多余的)。
However, I'd like to ask why the open and close brackets are required here:
(.*)
圆括号表示组。分组用于"save"匹配文本的内容,方便以后使用。
And also why is
</code> the variable which stores the original file name, why can't I do the the same with following (where I have replaced <code>
with</code>): ...</p> </blockquote> <p>如<code>rename(1)
,第一组存入</code>,第二组存入<code>
,以此类推。例如,下面的正则表达式:(a)(b)(c)
将单个
a
存储到</code>,将单个 <code>b
存储到</code> 等等。</p> <p>你只有一组,所以你必须使用<code>
。</code>、<code>
、...等标记将为空。最后但同样重要的是,您可以使用更短的等效命令:
rename 's/^/new./'
这里
^
表示字符串的开始