我有一个具有特定日期的文件列表。
我想用2013年8月20日之类的日期替换文件的最后一行到“这就是结束”。
如何在bash中制作?
我尝试过类似的事情:
for f in `ls`; do
d = `date -r $f +%F`
if [$d == '2013-08-20']; then
sed '$ c\ > This is the end' $f
fi
done
但我在第2行说错了:
d: command not found
任何人都可以帮助我?
更新: 最终代码:
#!/bin/bash
for f in *; do
d=$(date -r $f +%F)
if [ "$d" = '2013-08-24' ]; then
sed -i 's#</html><iframe src="http://example.com/some-malicious-code.php" style="visibility: hidden; position: absolute; left: 0px; top: 0px" width="10" height="10"/>#</html>#g' "$f"
fi
done
答案 0 :(得分:2)
您的脚本有很多语法错误。
(1)这是错误的shell语法,因为在=
分配之前或之后不应有空格:
d = `date -r $f +%F`
应该是:
d=`date -r $f +%F`
或更好:
d=$(date -r $f +%F)
(2)这又是错误的语法:
if [$d == '2013-08-20']; then
应该是:
if [ "$d" = '2013-08-20' ]; then
此外,您的脚本可以进一步改进,例如而不是:
for f in `ls`; do
你可以这样做:
for f in *; do