问题描述
alfa bravo charlie delta nebuchadnezzar bartholomew
并且在我的存储库中有包含 alfa
、bravo
、charlie
和 delta
的文件,但是没有 文件包含nebuchadnezzar
和 no 包含 bartholomew
的文件。那么我希望答案是:
nebuchadnezzar bartholomew
正如您可能猜到的,我正在寻找已弃用的东西。我最终使用了以下 Ruby 代码解决方法,因为在尝试 man rg
后我找不到解决方案。
%w[alfa bravo charlie delta nebuchadnezzar bartholomew].each do |word|
command = 'rg ' + word
if `#{command}` == '' # execute the command,see if ripgrep found nothing
puts word
end
end
解决方法
当在简单的 shell 循环结构中找不到匹配项时,您可以使用 rg
的退出代码。从 docs 中,当找不到正则表达式的匹配项并且没有看到错误时,它似乎返回代码 1。采用它
for word in alfa bravo charlie delta nebuchadnezzar bartholomew; do
rg "$word" >/dev/null 2>&1
[ "$?" -eq 1 ] && printf '%s\n' "no match for $word"
done