bash脚本编辑目录中的所有文件

时间:2018-05-19 00:24:41

标签: linux bash loops sed

尝试编辑聊天目录中的所有日志文件,以替换给定值后下一行中找到的字符串值。

以下代码有效:

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

感觉我错过了一些明显的东西。

1 个答案:

答案 0 :(得分:4)

对于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

但不需要forsed已经可以做到了。

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