简单的 grep 表达式

简单的 grep 表达式

我有一些 grep 表达式没有按我的预期工作,我不明白为什么。

第一个表达式是查找以相同字符开头和结尾的行。这是我正在使用的表达方式...

grep -E '(.).*\1$' input

第二个表达式非常相似,因为它是查找具有相同第二个字符和倒数第二个字符的行...

grep -E '(.)(.).*\2.$' input

最后一个表达式是查找仅包含一个单词并以标点符号结尾的行...

grep -E '(\w){1}.*[[:punct:]]$' input

我不明白为什么这些不起作用,我是在做一些非常错误的事情还是只是一个简单的错误?

答案1

你离开了行首(插入符号)。以下是修改后的命令,仅匹配整行(并且不会匹配子字符串):

grep -E '^(.).*\1$' input

grep -E '^(.)(.).*\2.$' input

grep -E '^(\w){1}.*[[:punct:]]$' input

您可能还想修改第二个和第三个命令。

第二个命令不需要两个捕获组。你可以只用一个来做到这一点:

grep -E '^.(.).*\1.$' input

第三个命令不正确:它将匹配具有多个单词的字符串。更正后的版本可能是:

grep -E '^\w+[[:punct:]]$' input

相关内容