首页 > 解决方案 > 用于编辑目录中所有文件的 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

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

标签: linuxbashloopssed

解决方案


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

推荐阅读