![grep 中是否有类似于文件名替换中的 * 的内容?](https://linux22.com/image/1116798/grep%20%E4%B8%AD%E6%98%AF%E5%90%A6%E6%9C%89%E7%B1%BB%E4%BC%BC%E4%BA%8E%E6%96%87%E4%BB%B6%E5%90%8D%E6%9B%BF%E6%8D%A2%E4%B8%AD%E7%9A%84%20*%20%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%9F.png)
我需要找到所有以大写字母开头并且以单词 dog 和句点结尾的行。
我知道要找到以大写字母开头的行,我会这样做:egrep ^[AZ] filename
要查找以“dog”结尾的行,我会这样做:egrep dog.$ filename
但是我该如何同时执行这两项操作呢?我试过:egrep ^[AZ]*dog.$ filename
但它似乎不起作用。在文件名替换中,* 字符代表任意长度的字符串,甚至根本不是字符串。
答案1
你可能需要这个:
grep '^[[:upper:]].*dog\.$' file
您可能已经知道锚点^
(表示行首)和$
(表示行尾)。与其使用[A-Z]
,您最好使用 class ,[[:upper:]]
因为这样可能更好地处理重音大写字母(请注意,如果您的问题是家庭作业,您的老师可能不知道这一点——我的经验是,学校的命令行课程是现存最糟糕的教学之一,老师通常不擅长这一点,因为他们使用古老的技术……(坏)习惯很难改掉!)。
然后您要寻找.*
句点.
与任意字符匹配的位置,然后.*
表示任意数量的任意字符。
最后,你需要一个转义的句点,否则以或\.
结尾的行将匹配...因为未转义的句点匹配dogs
dog!
任何特点。
希望这可以帮助!
答案2
您需要编写以下模式:[AZ].*dog。
[AZ] 要求大写字母点,这意味着它是任意字符。'*' 表示任意多个大写字母。如果您想要字母字符,则请输入 [az] 而不是 '.'。星号不像在 bash 命令行中那样用作通配符,而是考虑前一个字符。
我希望这可以帮到你