我在目录中有一些文件:
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?
答案 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"