grep 正则表达式
时间:2020-01-09 10:38:47 来源:igfitidea点击:
如何在Linux或者Unix中从文件中grep完全匹配字符串或者模式。
如何搜索确切的模式。
如何使用示例进行grep精确匹配?
以下是我的示例文件,
# cat /tmp/somefile first line ABCD some text second line abcd some text third line12abcde some text fourth line 12.abcd.32 some text fifth line s(abcd)e some text sixth line 1234abcd some text seventh line 1abcd234 some text eighth line 234abcd1 some text abcd some text abcd
grep与-w完全匹配
现在使用grep,我们有一个参数(-w),用于对文件中的整个单词进行精确匹配的grep。
# grep -w abcd /tmp/somefile second line abcd some text fourth line 12.abcd.32 some text fifth line s(abcd)e some text abcd some text abcd
如我们所见,尽管grep并非100%成功,但它确实通过删除不相关的匹配对输出进行了过滤。
在grep的手册页中:
-w, --word-regexp Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore.
方法1:第一个和最后一个字符的grep
我们可以通过放置开始(^
)和结束($
)char的正则表达式来grep精确匹配。
由于我们计划为abcd使用grep,因此命令将是:
# grep -E "^abcd$" /tmp/somefile abcd
但是,如果我们观察到,此命令将无法捕获其他包含abcd的行。
我们必须了解,当我们定义正则表达式以查找开始(^)和结束($)字符时,它表示整行中的第一个和最后一个字符。
由于只有这样一种情况,行以a开头,以d结束,所以只有一个输出。
如果我们必须在行的中间找到任何内容,则此"行不通"。
如果字符串在开头,那么我们可以使用((^)`
# grep -E "^abcd" /tmp/somefile abcd some text abcd
方法2:使用空格字符匹配文本
我们只能搜索前导或者尾随空格字符的完全匹配,因此我们知道这是完全匹配
# grep -E "(^| )abcd( |$)" /tmp/somefile second line abcd some text abcd some text abcd
这为我们提供了与abcd完全匹配的所有行的完美输出。
或者使用\ s代替`()空白
# grep -E "(^|\s)abcd(\s|$)" /tmp/somefile second line abcd some text abcd some text abcd
方法3:匹配单词的开头和结尾
使用grep扩展的正则表达式,我们可以匹配单词的开头和结尾
# grep -E "\babcd(\s|$)" /tmp/somefile second line abcd some text abcd some text abcd
这里的(\ s | $)是指以空格结尾或者行尾,而/b被视为单词边界,它与单词边缘的空字符串匹配。
我们可能还使用过:
# grep -E "(\s|^)abcd(\s|$)" /tmp/somefile second line abcd some text abcd some text abcd
或者在文字末尾加上\ b时,使用/s +来匹配一个或者多个空格字符。
# grep -E "(^|\s+)abcd\b" /tmp/somefile second line abcd some text abcd some text abcd
方法4:与字符串中的数字匹配
现在,我们将尝试打印所有具有1234abcd
的行。
这里我们的字符串包含整数,现在假设我们不知道可以存在的整数值,我们都知道在abcd的开头有一些整数
# grep -E "[0-9]+abcd( |$)" /tmp/somefile sixth line 1234abcd some text
这里的[0-9] +
将匹配一个或者多个整数,后跟abcd,而(| $)
将确保该字符串位于该行的末尾,且末尾有一个空格字符