具有复杂分隔符的Linux grep命令

时间:2014-02-21 11:57:54

标签: regex linux bash shell grep

我在目录中有一些文件:

140221_alzproddbadm01.log
140221_alzproddbadm02.log
140221_alzproddbadm03.log
132123_ehxsk01.log
try.sh
logs
expan
140221_alzproddbadm04.log
23891_ehxsk02.log

我只需要点击这些:

140221_alzproddbadm04.log
23891_ehxsk02.log
140221_alzproddbadm01.log
140221_alzproddbadm02.log
140221_alzproddbadm03.log
132123_ehxsk01.log

格式并不复杂(numbers + _ + bla bla bla)但我不知道如何为我的问题编写正确的正则表达式。

ls -l | grep root | cut -d " " -f9 | grep #what to write next?

3 个答案:

答案 0 :(得分:2)

你可以这样做:

$ grep -E '[0-9]*_[[:alpha:]]*.log' file
140221_alzproddbadm01.log
140221_alzproddbadm02.log
140221_alzproddbadm03.log
132123_ehxsk01.log
140221_alzproddbadm04.log
23891_ehxsk02.log

甚至

ls -l [0-9]*_[a-z]*.log | grep root | ...

答案 1 :(得分:1)

为什么不恰当地对文件进行通配? e.g。

$ grep pattern *.log

所以shell本身只会将任何以“.log”结尾的内容传递给grep。请注意,这与grep无关,而与shell globbing function无关,因此适用于任何命令。

如果你有一个特定的文件列表(/tmp/listOfFiles.txt),那么可能:

    #!/bin/bash
    while IFS= read -r file
    do
           grep pattern "$file"
    done < /tmp/listOfFiles.txt

有关详细信息,请参阅here

答案 2 :(得分:1)

只需使用find命令:

find /path/to/dir -name "*\.log"