linux - 用于编辑目录中所有文件的 bash 脚本
问题描述
尝试编辑聊天目录中的所有日志文件,以替换在给定值之后的下一行中找到的字符串值。
下面的代码有效:
sed '/Did cool stuff/{n;s/how cool/sweet as bru/g} logname.log
但是当试图执行bash
它永远不会完成,即只是挂起:
#!home/bin/bash
for file in /home/logs/*.log ; do
sed '/Did cool stuff/{n;s/how cool/sweet as bru/g}' ;
done
感觉好像我错过了一些明显的东西。
解决方案
对于for
循环,您需要命令行上的循环变量,如果您关闭文件名,sed
将从标准输入读取,脚本将挂起等待输入。
#!/bin/bash
for file in /home/logs/*.log ; do
sed '/Did cool stuff/{n;s/how cool/sweet as bru/g}' "$file";
done
但是for
不需要sed
,已经可以了。
sed '/Did cool stuff/{n;s/how cool/sweet as bru/g}' /home/logs/*.log
如果要更改文件内容而不是显示更改后的版本,请使用-i
.
sed -i '/Did cool stuff/{n;s/how cool/sweet as bru/g}' /home/logs/*.log
推荐阅读
- swift - 惰性 var 正常实例化和闭包实例化有什么区别?
- c - 为什么我可以在 C 中调用未定义的函数 sqrt()?
- google-apps-script - 如何从不同文档的电子表格中的单元格中获取值
- java - 如何在构造函数中使用@Autowired 对象?
- c# - C# 访问 BindableObject 属性
- meson-build - 如何在介子中运行构建后命令?
- sql - 如何检查 VARCHAR 是否包含至少一个大写字母 - PostgreSQL
- ruby-on-rails - 将我的 Rails 数据库切换到 Heroku 的 PostgreSQL,现在应用程序根本无法访问数据库
- javascript - 参考电流为空
- c++ - 如何从 C++ 中的数组中删除元素?