grep的开始和结束的行?

我有一个文件,我想grep以-rwx或drwx开始并以任何数字结尾的行。

我有这个,但不是很对。 有任何想法吗?

grep [^.rwx]*[0-9] usrLog.txt 

棘手的部分是一个正则expression式,其中包括一个破折号作为字符类中的有效字符之一。 破折号必须在一个(正常的)字符类开始之后立即出现,并且紧跟在否定的字符类之后。 如果你还需要一个方括号,那么你需要靠近方括号后面的破折号。 实际上,你只需要冲刺,因此select了符号。

 grep '^[-d]rwx.*[0-9]$' "$@" 

有关POSIX标准的详细信息,请参阅: 正则expression式和grep 。

它看起来像你在正确的轨道上… ^字符匹配行首, $匹配行结束。 乔纳森的模式将为你工作…只是想给你背后的解释

你可能想要egrep。 尝试:

 egrep '^[d-]rwx.*[0-9]$' usrLog.txt 

应该注意的是,不仅插入符号(^)在括号内的行为不同,它将有相反的结果放在括号外。 放置插入符号的位置将search所有string,而不是以放置在括号内的内容开始。 你也希望在括号之间的星号之前放一个句号,就像grep一样,它也可以作为“通配符”。

 grep ^[.rwx].*[0-9]$ 

这应该适合你,我注意到一些海报在他们的表情中使用了一个字符类,这也是一个有效的方法,但是你并没有在你的原始expression式中使用任何字符类,所以我试图让一个尽可能接近你的每一个小小的改变,使之更好理解。 我们如何才能学习呢?

你parsingls -l输出吗?

如果你是,而你只是想获得文件名

 find . -iname "*[0-9]" 

如果你没有select,因为usrLog.txt由某人/别人创build,你绝对必须使用这个文件,其他选项包括

 awk '/^[-d].*[0-9]$/' file 

ruby(1.9+)

 ruby -ne 'print if /^[-d].*[0-9]$/' file 

巴什

 while read -r line ; do case $line in [-d]*[0-9] ) echo $line; esac; done < file