Regex unix-查找并替换为正则表达式

Regex unix-查找并替换为正则表达式,regex,unix,replace,find,perl,Regex,Unix,Replace,Find,Perl,我想查找所有包含字符串“Of”的文件,将其替换为“Of”,但在“Of”之前带有连字符的字符串除外:“-Of” 首先我有这个命令: find . -depth -name "* Of *" -exec bash -c 'for f; do base=${f##*/}; mv -- "$f" "${f%/*}/${base// Of / of }"; done' _ {} + 但是我想用正则表达式来表示“-Of”排除 我该怎么做 我对sed regex感到困惑 使用 find . -regexty

我想查找所有包含字符串“Of”的文件,将其替换为“Of”,但在“Of”之前带有连字符的字符串除外:“-Of”

首先我有这个命令:

find . -depth -name "* Of *" -exec bash -c 'for f; do base=${f##*/}; mv -- "$f" "${f%/*}/${base// Of / of }"; done' _ {} +
但是我想用正则表达式来表示“-Of”排除

我该怎么做

我对sed regex感到困惑

使用

find . -regextype sed -regex '.* Of *'
它只找到以Of结尾的路径

帕特里克

试着用以下方法来做:

你得到的结果是

.../rename: Perl script, ASCII text executable
那么这似乎是正确的工具=)

如果不是,将其作为
Debian
和类似
Ubuntu
的衍生工具的默认值(通常已经是这种情况):

$ sudo update-alternatives --set rename /path/to/rename
(将
/path/to/rename
替换为
perl的rename
命令的路径


如果没有此命令,请搜索软件包管理器以安装它,或者



最后但并非最不重要的一点是,这个工具最初是由Perl的父亲Larry Wall编写的。

对不起,我应该把rename-n放在哪里呢|(?在一个shell中,包含文件的目录再次出错,您完全弄丢了我。感谢您的尝试。它不起作用。我得到了这个:rename:unknown选项--n。如果我删除了-n:rename:not ough arguments如果您没有正确的rename命令,请参阅我最初的POSTPlease中的解释,有人有si吗这个问题的简单解决方案?
.../rename: Perl script, ASCII text executable
$ sudo update-alternatives --set rename /path/to/rename