macos - 执行此命令的 Mac OS X 方式是什么

标签 macos ubuntu sed terminal

我正在尝试执行此命令:

find ./ -type f -readable -writable -exec sed -i "s/A/B/g" {} \;

我收到了这个错误:
find: -readable: unknown primary or operator

我正在尝试广泛查找和替换名称为“A”到“B”的任何内容,这将适用于文件内的文件名和文本。

我在 Mac 终端上执行此操作的最佳方式是什么?

最佳答案

find 的 BSD 版本没有 -readable-writable初选,但您可以使用 test 伪造它们命令:

find ./ -type f -exec test -r {} -a -w {} \; -exec sed -i "" "s/A/B/g" {} \;

这里可能有问题 test的语法可能与三个以上的参数不明确,因此像这样的复合测试表达式可能会被错误解析。我认为以 ./ 开头的路径不会有问题。 ,但如果你担心它,你可以使用两个单独的测试:
find ./ -type f -exec test -r {} \; -exec -w {} \; -exec sed -i "" "s/A/B/g" {} \;

另外,请注意我在 sed 中添加了一个空参数。在 -i 之后.这是另一个 BSD-vs-GNU 的事情。 sed 的 BSD 版本-i 需要一个参数(用于备份的扩展名)选项,因此为了避免进行备份,您必须明确提供空白。另一方面,GNU 版本会被 sed -i .bak 混淆。因为它需要 -i 的参数直接附加到它(sed -i.bak)。哇。

关于macos - 执行此命令的 Mac OS X 方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48362901/

相关文章:

c# - 用于 Mac OS X 上 .NET Core 开发的对象浏览器

ubuntu - docker 的 daemon.json 在哪里? (失踪)

macos - OSX 10.8 OpenGL扩展

c++ - 设置库包含 C++ 中的路径

python - 获取 "No module named django_messages"

python - 导入错误 : No module named 'deployment'

使用 sed 和/或 grep 的正则表达式

bash - 如何将逗号分隔值放入换行符并在包含冒号之前删除所有 id

sed:如何将记录的行与分隔记录的空行连接起来

ios - 在 Objective C 中使用相应国家/地区的货币格式