grep 中是否有类似于文件名替换中的 * 的内容?

grep 中是否有类似于文件名替换中的 * 的内容?

我需要找到所有以大写字母开头并且以单词 dog 和句点结尾的行。

我知道要找到以大写字母开头的行,我会这样做:egrep ^[AZ] filename

要查找以“dog”结尾的行,我会这样做:egrep dog.$ filename

但是我该如何同时执行这两项操作呢?我试过:egrep ^[AZ]*dog.$ filename

但它似乎不起作用。在文件名替换中,* 字符代表任意长度的字符串,甚至根本不是字符串。

答案1

你可能需要这个:

grep '^[[:upper:]].*dog\.$' file

您可能已经知道锚点^(表示行首)和$(表示行尾)。与其使用[A-Z],您最好使用 class ,[[:upper:]]因为这样可能更好地处理重音大写字母(请注意,如果您的问题是家庭作业,您的老师可能不知道这一点——我的经验是,学校的命令行课程是现存最糟糕的教学之一,老师通常不擅长这一点,因为他们使用古老的技术……(坏)习惯很难改掉!)。

然后您要寻找.*句点.与任意字符匹配的位置,然后.*表示任意数量的任意字符。

最后,你需要一个转义的句点,否则以或\.结尾的行将匹配...因为未转义的句点匹配dogsdog!任何特点。

希望这可以帮助!

答案2

您需要编写以下模式:[AZ].*dog。

[AZ] 要求大写字母点,这意味着它是任意字符。'*' 表示任意多个大写字母。如果您想要字母字符,则请输入 [az] 而不是 '.'。星号不像在 bash 命令行中那样用作通配符,而是考虑前一个字符。

我希望这可以帮到你

相关内容