如何使用grep校验多词字符串中的每个精确单词都存在于指定文件中
解决方案
以下两种方案都不需要提前手动解析转换目标字符串,直接使用即可。
方案1:单行快速实现(适合无重复单词的场景)
str="the quick brown fox jumps over the lazy dog" [ $(tr ' ' '\n' <<< "$str" | grep -xFf - checker.txt | wc -l) -eq $(wc -w <<< "$str") ] && echo 1 || echo 0
参数说明:
tr ' ' '\n':将目标字符串按空格拆分,每个单词单独占一行,直接作为匹配规则传入grep-x:要求整行完全匹配,避免部分匹配误差-F:将匹配内容作为普通字符串处理,不解析正则元字符,避免特殊字符导致的异常-f -:从标准输入读取匹配规则,不需要提前拼接正则表达式
方案2:兼容重复单词的稳妥实现
如果目标字符串存在重复单词(比如示例中的the出现了2次),可以用下面的循环实现,逻辑更严谨:
str="the quick brown fox jumps over the lazy dog" res=1 for word in $str; do grep -qx "$word" checker.txt || { res=0; break; } done echo $res
逻辑说明:
遍历目标字符串的每个单词,逐个校验是否存在于checker.txt中,只要有一个单词不存在就立即终止校验,返回0;所有单词都存在则返回1。
内容的提问来源于stack exchange,提问作者Tony Hoan Trinh
相关产品推荐
相关产品推荐

