Grep的开头和结尾?

tex*_*ode 61 grep

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

我有这个,但它不是很正确.有任何想法吗?

grep [^.rwx]*[0-9] usrLog.txt
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 56

棘手的部分是一个正则表达式,它包含一个破折号作为角色类中的一个有效字符.破折号必须在(正常)字符类的开始之后立即到达,并且在插入符号之后立即为否定字符类.如果您也需要一个紧密的方括号,那么您需要紧密的方括号,然后是短划线.幸运的是,你只需要冲刺,因此选择了符号.

grep '^[-d]rwx.*[0-9]$' "$@"
Run Code Online (Sandbox Code Playgroud)

请参阅:正则表达式grep for POSIX标准详细信息.

  • 或者`grep -x'[-d] rwx.*[0-9]'`. (2认同)
  • `-x`是POSIX.括号下面的括号:`[[.-.] [.].]]`(被授予,比[[] - ]`的可读性差.我*相信*这也是POSIX ...... (2认同)
  • @ephemient:哦,是的,'grep -x' 在 POSIX 中已经存在了很长时间 - 2008、2004、1997(SUS)。我的错...我从来没有费心去寻找这样的选项,因为 '^....$' 是完全常规的,并且使用的字符比单独的 '-x' 选项少一个字符。 (2认同)

Ray*_*Ray 28

看起来你在正确的轨道上... ^角色匹配行首,并$匹配行尾.乔纳森的模式对你有用......只是想给你背后的解释

  • 但不完全是在正确的轨道上.值得注意的是,`[]`字符类中的字符与正则表达式的其他部分中的字符行为明显不同. (4认同)

Nat*_*ate 5

你可能想要 egrep。尝试:

egrep '^[d-]rwx.*[0-9]$' usrLog.txt
Run Code Online (Sandbox Code Playgroud)


小智 5

应当注意,插入号(^)在括号内的行为不仅会有所不同,而且将其置于括号外的效果也会相反。将插入符号放在您要插入的位置,将搜索所有不以放在括号内的内容开头的字符串。您还希望像grep一样在方括号之间的星号前放置一个句点,它也可以用作“通配符”。

grep ^[.rwx].*[0-9]$
Run Code Online (Sandbox Code Playgroud)

这应该对您有用,我注意到有些发布者在其表达式中也使用了字符类,这也是一种有效的方法,但是您在原始表达式中没有使用任何字符类,因此我尝试尽可能地接近您的解释沿途的每一个细微变化都可以更好地理解。否则我们如何学习?