grep 不匹配确切的字符串
grep not matching exact string
我对 grep
没有按预期表现感到有点困扰。
我正在尝试从一种字典中提取主机,其结构类似于 OLD_HOST_NAME;NEW_HOST_NAME
,其中一些具有相同的前缀,例如“HOST-1-2”。
我只想匹配“HOST-1-2”,但独立于我传递给 grep 的选项,它会返回所有具有相同前缀的字符串,而不是只匹配确切的字符串,即:
grep -F "HOST-1-2" dict.txt
HOST-1-2-3;NEW_HOST-1-2-3
HOST-1-2-4;NEW_HOST-1-2-4
HOST-1-2-5;NEW_HOST-1-2-5
我尝试了几个选项,例如 grep -w "HOST-1-2"
、grep -e '\HOST-1-2\b'
、grep -e '\HOST-1-2\b'
、grep -Po "\bHOST-1-2\b"
(实际上符合我的要求,但它对所有出现的子字符串,所以它仍然无法正常工作),尝试混合它们,但在一天结束时我仍然没有得到我需要的东西。
知道如何实现我想要的结果,以便在没有所有其他部分匹配的情况下只搜索“HOST-1-2”吗?
编辑:
很抱歉没有更清楚地指定,字典示例是我已经显示的由于错误的子字符串匹配 crep:
old_host;new_host
SERVER-1;NEW_SERVER-1
HOST-1-2-3;NEW_HOST-1-2-3
HOST-1-2-4;NEW_HOST-1-2-4
HOST-1-2-5;NEW_HOST-1-2-5
我已经说明了我想要实现的目标:
in order for grepping only "HOST-1-2" without all the other partial
matches
您可以使用这个 grep
:
grep -E '(^|;)HOST-1-2(;|$)' file
这意味着:
-E
: 启用扩展正则表达式模式
(^|;)
:比赛开始或;
HOST-1-2
:匹配HOST-1-2
(;|$)
:匹配;
或结束
您可以使用 grep -o
仅打印匹配的部分行,并在 2
之后和 H
之前添加一个单词边界
grep -o '\<HOST-1-2\>' ./dict.txt
输出
HOST-1-2
HOST-1-2
HOST-1-2
如果您只想打印第一个匹配项:
grep -oP '^.*?\b\KHOST-1-2\b' ./dict.txt
我对 grep
没有按预期表现感到有点困扰。
我正在尝试从一种字典中提取主机,其结构类似于 OLD_HOST_NAME;NEW_HOST_NAME
,其中一些具有相同的前缀,例如“HOST-1-2”。
我只想匹配“HOST-1-2”,但独立于我传递给 grep 的选项,它会返回所有具有相同前缀的字符串,而不是只匹配确切的字符串,即:
grep -F "HOST-1-2" dict.txt
HOST-1-2-3;NEW_HOST-1-2-3
HOST-1-2-4;NEW_HOST-1-2-4
HOST-1-2-5;NEW_HOST-1-2-5
我尝试了几个选项,例如 grep -w "HOST-1-2"
、grep -e '\HOST-1-2\b'
、grep -e '\HOST-1-2\b'
、grep -Po "\bHOST-1-2\b"
(实际上符合我的要求,但它对所有出现的子字符串,所以它仍然无法正常工作),尝试混合它们,但在一天结束时我仍然没有得到我需要的东西。
知道如何实现我想要的结果,以便在没有所有其他部分匹配的情况下只搜索“HOST-1-2”吗?
编辑: 很抱歉没有更清楚地指定,字典示例是我已经显示的由于错误的子字符串匹配 crep:
old_host;new_host
SERVER-1;NEW_SERVER-1
HOST-1-2-3;NEW_HOST-1-2-3
HOST-1-2-4;NEW_HOST-1-2-4
HOST-1-2-5;NEW_HOST-1-2-5
我已经说明了我想要实现的目标:
in order for grepping only "HOST-1-2" without all the other partial matches
您可以使用这个 grep
:
grep -E '(^|;)HOST-1-2(;|$)' file
这意味着:
-E
: 启用扩展正则表达式模式(^|;)
:比赛开始或;
HOST-1-2
:匹配HOST-1-2
(;|$)
:匹配;
或结束
您可以使用 grep -o
仅打印匹配的部分行,并在 2
之后和 H
grep -o '\<HOST-1-2\>' ./dict.txt
输出
HOST-1-2
HOST-1-2
HOST-1-2
如果您只想打印第一个匹配项:
grep -oP '^.*?\b\KHOST-1-2\b' ./dict.txt