Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 重命名文件Mac命令行_Regex_Macos_File - Fatal编程技术网

Regex 重命名文件Mac命令行

Regex 重命名文件Mac命令行,regex,macos,file,Regex,Macos,File,我在一个目录中有一堆文件,这些文件的名称很不恰当。我想更改名称中的两个字符。 例如,我有: >ch:sdsn-sdfs.txt 我想删除“>”并将“:”改为“\ux” 导致 CHU sdsn-sdfs.txt 我试着只说mv\\>ch\:*ch\*,但没用。 有没有简单的解决办法 首先,我应该说最简单的方法是使用 prename或rename命令 自制软件包rename,MacPorts软件包renameutils: 这比等效的sed命令更容易理解 但是对于理解sed命令,sed手册页是有帮助的

我在一个目录中有一堆文件,这些文件的名称很不恰当。我想更改名称中的两个字符。 例如,我有:

>ch:sdsn-sdfs.txt

我想删除“>”并将“:”改为“\ux”

导致

CHU sdsn-sdfs.txt

我试着只说
mv\\>ch\:*ch\*
,但没用。

有没有简单的解决办法

首先,我应该说最简单的方法是使用 prename或rename命令

自制软件包
rename
,MacPorts软件包
renameutils

这比等效的sed命令更容易理解

但是对于理解sed命令,sed手册页是有帮助的。如果 运行mansed并搜索&(使用/命令搜索), 在s/foo/bar/replacements中,您会发现它是一个特殊的字符

  s/regexp/replacement/
         Attempt  to match regexp against the pattern space.  If success‐
         ful,  replace  that  portion  matched  with  replacement.    The
         replacement may contain the special character & to refer to that
         portion of the pattern space  which  matched,  and  the  special
         escapes  \1  through  \9  to refer to the corresponding matching
         sub-expressions in the regexp.
因此,
\(.\)
匹配第一个字符,该字符可由
\1
引用。 然后
匹配下一个字符,该字符始终为0。 然后,
\(.*)
匹配文件名的其余部分,该文件名可由
\2
引用

替换字符串使用
(原始
文件名)和
\1\2
这是文件名的每一部分,第二部分除外 字符,它是一个0

这是一个相当神秘的方法,伊姆霍。如果为了 由于某些原因,重命名命令不可用,您希望使用 sed重新命名(或者你做的事情太复杂了) 对于重命名?),在正则表达式中更加明确会使 更具可读性。也许是这样的:

ls F00001-0708-*|sed 's/F0000\(.*\)/mv & F000\1/' | sh
能够看到未来的实际变化 s/search/replacement/使其更具可读性。而且它也不能保持 如果不小心运行文件名,则会从文件名中吸出字符
两次左右。

对于要重命名的命令行脚本,有很好的答案

对于Mac,在GUI中,Finder具有批量重命名功能。若源文件列表中有一些模式需要查找和替换,那个么它就非常方便了

选择所有需要替换的文件,单击鼠标右键并选择“重命名”

在重命名时,输入find and replace string

重命名中的其他选项,以对文件名进行排序:

要为文本添加前缀或后缀,请执行以下操作:

请参见此链接,尝试在文件名中添加双引号@萨莫特:谢谢,我一直在四处寻找答案,但这个答案从来没有出现过。你想把它作为一个答案,我可以选择它吗?遗憾的是,renameutils MacPort没有包含
rename
命令!尽管如此,答案还是很好。
ls F00001-0708-*|sed 's/F0000\(.*\)/mv & F000\1/' | sh