SED,获取最后一个文件名

时间:2010-11-09 11:21:16

标签: bash sed quartz-composer

这是一个SED问题。

我在Quartz Composer(Mac OSX)脚本中工作:

  1. 从目录中打开最后一个.log。
  2. 获取该文件的最后一个文本行并删除其24个第一个字符。
  3. 每次在最后一个.log
  4. 中创建新行时显示最后一行

    我认为这很简单。此时此刻,我已经在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命令的结果输出到新文件?怎么可能这么简单呢?

    提前谢谢。

2 个答案:

答案 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