如何使用ack工具返回未匹配到的查询字符串?
用ack查找未匹配的查询字符串
ack本身没有内置选项直接输出未被文件匹配到的查询字符串,但可以结合shell命令实现这个需求,以下是两种可行方法:
方法一:遍历查询列表对比匹配结果
先定义要查询的字符串列表,再提取文件中实际匹配到的内容,最后对比找出未匹配项:
# 定义需要查询的目标字符串数组 targets=("hello" "world" "dog") # 从文件中提取所有匹配到的字符串并去重 matched=$(ack -o "hello|world|dog" data.txt | sort -u) # 遍历数组,输出未被匹配的字符串 for str in "${targets[@]}"; do if ! grep -qxF "$str" <<< "$matched"; then echo "$str" fi done
-o:让ack仅输出匹配到的字符串片段,而非整行内容sort -u:对匹配结果去重,避免重复判断同一字符串grep -qxF:精确匹配目标字符串,确保只识别完全一致的内容
方法二:用comm命令对比排序后的列表
利用comm命令对比两个排序后的输入集合,直接输出仅在查询列表中存在的项:
comm -23 <(printf "%s\n" hello world dog | sort) <(ack -o "hello|world|dog" data.txt | sort -u)
<(...):将命令输出作为临时文件输入给comm-23:让comm只显示第一个输入中有、但第二个输入中没有的内容,也就是未匹配的查询字符串
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

