Bash脚本将仅替换第一行

时间:2014-04-05 10:43:39

标签: bash shell scripting

我想使用tcpdump提取数据包的时间戳并将其放入文件中,以便最新的时间戳替换第一行(该行为空或包含倒数第二个数据包的时间戳) 。 文件应该只有1行条目即必需。最新数据包的时间戳。

这就是我所做的:

sudo tcpdump -i eth0 -l | cut -d . -f1 >  test.txt

cat test.txt
16:08:04
16:08:05
16:08:05
16:08:05
16:08:05
16:08:05
16:08:05
16:08:05

但我想要的只是最新的时间戳:

cat test.txt
16:08:05

任何想法?

2 个答案:

答案 0 :(得分:2)

从我测试的内容来看,您的脚本看起来会永远运行,您可能需要在另一个进程中看到最后一个数据包,不是吗?

$ cat test.txt

16:08:04
16:08:05
16:08:05
16:08:05
16:08:05
16:08:05
16:08:05
16:08:05

如果您只想要最新的数据包(即最后一行),请尝试

$ tail -1 test.txt

16:08:05

如果您想与其他数据包一起查看最新的数据包,请尝试

$ tail -1 test.txt > tmp_out; cat test.txt >> tmp_out; cat tmp_out

16:08:05
16:08:04
16:08:05
16:08:05
16:08:05
16:08:05
16:08:05
16:08:05
16:08:05

答案 1 :(得分:0)

使用awk你可以这样做:

sudo tcpdump -i en0 -l -c 5 2>/dev/null | awk -F'\\.' '$1~/^[012][0-9]:/{p=$1} 
   END{print p > "output"}'

cat output
08:27:51

这将获得最大时间戳并将其存储在名为output的文件中。