我有一个文件,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
上述命令搜索确切的单词或搜索表达式。