在unix中搜索精确的字符串

在unix中搜索精确的字符串

我有一个文件,xyz.txt,每行一个字符串。
我如何搜索xyz.txt为了精确匹配?
我得到一个输入字符串,例如。defabc,来自另一个应用程序。
如果defabc找到,应该返回真的, 别的错误的。我可以在 中使用正则表达式吗grep

示例文件:xyz.txt:

abc
def
abc_def
def_abc
abcdef
defabc
uvx

答案1

使用该-F选项,grep查找完全匹配(正则表达式功能关闭):

$ grep -F "defabc" xyz.txt
defabc

grep设置适当的返回代码,以便我们可以测试 true 或 false:

$ if grep -qF "defabc" xyz.txt; then echo True; else echo False; fi
True
$ if grep -qF "Defabc" xyz.txt; then echo True; else echo False; fi
False

因为我们只想grep设置一个返回码,所以该-q选项用于告诉grep要安静(省略正常输出)。

将匹配限制为整个单词

如果我们想要匹配defabc但不想匹配defabc1,我们可以添加选项-w来将匹配限制为整个单词:

if grep -qFw "defabc" xyz.txt; then echo True; else echo False; fi

man grep解释如何grep定义“单词”:

-w, --word-正则表达式
仅选择包含构成整个单词的匹配项的行。测试是匹配的子字符串必须位于行的开头,或者前面有一个非单词组成字符。同样,它必须位于行尾或后跟非单词组成字符。
单词组成字符是字母、数字和下划线。

捕获 shell 变量中的输出

为了捕获命令的输出,我们使用命令替换其形式为$(...)

$ r=$(if grep -qF "defabc" xyz.txt; then echo True; else echo False; fi)
$ echo $r
True

捕获 shell 变量中的退出代码

grep -qF "defabc" xyz.txt
r=$?

r如果匹配则为零,如果不匹配则为 1,如果发生其他错误则为 2。

答案2

Unix 的 Korn Shell 中搜索精确表达式的命令

grep -w "SEARCH_EXPRESSION" FILE_TO_BE_SEARCHED

上述命令搜索确切的单词或搜索表达式。

相关内容