bash tail error: cannot open input when using -c option

bash tail error: cannot open input when using -c option

我正在尝试确定在何处切断日志以缩小其大小。 该日志于 2010 年启动,并且从那时起每天 运行 被脚本附加。我正在搜索日志的每一行以提取其中包含日期的行,然后我想获取这些行的最后 4 个字符作为代表年份。然后我可以确定 2018 年首先出现在哪一行,然后 t运行cate 上面的文件。

我正在尝试使用 tail -c 4 来获取每行的最后 4 个字符,但我一直收到来自 tail 的 "cannot open input" 错误。

代码:

#!/bin/bash

date=$(grep ' EST ' input.log)

IFS=$'\n'

for line in $date
do
   printf "%s\n" "$line" > output.tmp
   chmod 777 output.tmp
   echo $(tail -c 4 output.tmp)
done

当我 运行 此代码只有 "tail output.tmp",没有任何选项时,它按预期工作并输出当前正在迭代的完整行。

但是当我尝试使用 tail -c 4 时,出现了 "tail: cannot open input" 错误。

我已经检查了 tail 的手册页并且 -c 选项可用,那么我做错了什么?或者除了使用尾巴之外还有更好的方法来解决这个问题吗? (我的系统上没有可用的 grep -o 选项)。

您不需要临时文件:

#!/bin/bash

date=$(grep ' EST ' input.log)

IFS=$'\n'

for line in $date
do
   echo ${line: -4}
done