尝试编辑聊天目录中的所有日志文件,以替换给定值后下一行中找到的字符串值。
以下代码有效:
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
感觉我错过了一些明显的东西。
答案 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
但不需要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