我使用以下命令递归搜索目录中的特定字符串,并将其替换为另一个字符串:

grep -rl oldstr path | xargs sed -i 's/oldstr/newstr/g'

这没问题.唯一的问题是,如果字符串不存在,那么sed将失败,因为它没有任何参数.这对我来说是个问题,因为我用ANT自动运行这个程序,而构建失败是因为sed次失败.

如果找不到字符串,有没有办法使其防故障?

我感兴趣的是一个可以使用的单行简单解决方案(不一定是grepsed,而是像这样的常见unix命令).

推荐答案

您可以将find-exec直接用于sed,而不是先用grep定位oldstr.效率可能会低一点,但这可能并不重要.这样,sed替换将在find列出的所有文件上执行,但如果oldstr不在那里,它显然不会对其进行操作.

find /path -type f -exec sed -i 's/oldstr/newstr/g' {} \;

Linux相关问答推荐

在同一目录中未检测到G++预编译头

如何调试tokio任务挂起的位置?

awk 使用动态列号

在 Linux 上的 std::threads 中创建子进程

如何在 Linux 上打印带有屏蔽值的环境名称?

如何验证所有 csv 文件是否具有相同的第一行?

SessionNotCreatedException:无法启动新会话.响应代码 500 在远程服务器上的 Apache Tomcat/10.0.23 上使用 ChromeDriver

可以用openmp并行化内存分配删除吗? (c++)

Google Cloud Ops Agent Mongo 集成错误 - AuthenticationFailed:SCRAM 身份验证失败,storedKey 不匹配

使用 Dockerfile RUN 执行某些操作但忽略错误

DMA 和内存映射 IO 有什么区别?

使用带有 gnome-keyring 的 Git 凭证助手作为 Sudo 时出错

内核是如何工作的?

如何计算列的平均值

使用 ssh 判断远程主机上是否存在文件

使用单个命令打开 .tar.gz 文件

Ant 找不到 javac,在 Ubuntu 上不会设置 JAVA_HOME

ldconfig 错误:使用 Linux 加载程序时不是符号链接

初学者如何在 Linux 中开始使用 Mono?

如何安排 tcpdump 在特定时间段内运行?