这是一个SED问题。
我在Quartz Composer(Mac OSX)脚本中工作:
我认为这很简单。此时此刻,我已经在QC中完成了这项工作,而且几乎正常运行。但是我在 getFileName.sh 和 getLastLineOfLog.sh
中都遇到了SED命令的问题getFileName.sh
#!/bin/bash
cd /Users/Me/
/bin/echo `ls -tr *.log | tail -1`
我需要的是打开最后一个.log文件,其名称结构 127.0.0.1,NUMBER.log 是NUMBER部分的5位数字。数字越大,.log文件越新。现在,它只打开第一个.log文件。
你知道如何在SED中写出正确的命令吗?
getLastLineOfLog.sh
#!/bin/bash
/usr/bin/tail -1 /Users/Me/$1 | sed 's/^.\{24\}//' > /Users/Me/$1.log
echo `/usr/bin/tail -1 /Users/Me/$1.log`
在第二个文件中,我试图获取已加载的.log的最后一个文件并在没有其24个第一个字符的情况下回显它。它可以工作,但创建一个新的.log.log。每次函数通过时(等)文件,我想避免的事情。
是否有必要将SED命令的结果输出到新文件?怎么可能这么简单呢?
提前谢谢。
答案 0 :(得分:2)
如果您想按文件名排序:
ls *.log | sort -t, -k2 -n | tail -1
答案 1 :(得分:1)
getFileName.sh
#!/bin/bash
cd /Users/Me/
ls -tr *.log | tail -1
您不需要echo
,因为echo
会输出其参数。
getLastLineOfLog.sh
#!/bin/bash
/usr/bin/tail -1 /Users/Me/$1 | sed 's/^.\{24\}//'
同样在这里,您已经只有最后一行,因此您不需要另一行tail
。
编辑: 实际上你也可以通过sed:
来摆脱尾巴getLastLineOfLog.sh
#!/bin/bash
sed -ne'$s/^.\{24\}//p' /Users/Me/$1