1

我有一个包含特定日期的文件列表。

我想将文件的最后一行替换为 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
4

1 回答 1

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
于 2013-09-09T21:27:58.317 回答