From unknown Fri Aug 15 17:21:28 2025 X-Loop: help-debbugs@gnu.org Subject: bug#33972: grep -vf <() filters all rows Resent-From: luke@gavelfamily.com Original-Sender: "Debbugs-submit" Resent-CC: bug-grep@gnu.org Resent-Date: Fri, 04 Jan 2019 05:16:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 33972 X-GNU-PR-Package: grep X-GNU-PR-Keywords: To: 33972@debbugs.gnu.org X-Debbugs-Original-To: bug-grep@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.154657892222094 (code B ref -1); Fri, 04 Jan 2019 05:16:02 +0000 Received: (at submit) by debbugs.gnu.org; 4 Jan 2019 05:15:22 +0000 Received: from localhost ([127.0.0.1]:46141 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gfHpK-0005kG-5A for submit@debbugs.gnu.org; Fri, 04 Jan 2019 00:15:22 -0500 Received: from eggs.gnu.org ([208.118.235.92]:36441) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gfHf1-0005Up-2T for submit@debbugs.gnu.org; Fri, 04 Jan 2019 00:04:43 -0500 Received: from lists.gnu.org ([208.118.235.17]:59524) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gfHf0-0002Tj-NH for submit@debbugs.gnu.org; Fri, 04 Jan 2019 00:04:42 -0500 Received: from eggs.gnu.org ([208.118.235.92]:45668) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gfHez-0000JM-TK for bug-grep@gnu.org; Fri, 04 Jan 2019 00:04:42 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,HTML_MESSAGE, RCVD_IN_DNSWL_NONE autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gfHeu-0002KT-Ue for bug-grep@gnu.org; Fri, 04 Jan 2019 00:04:41 -0500 Received: from atl4mhob20.registeredsite.com ([209.17.115.114]:36146) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gfHeu-0002AV-OU for bug-grep@gnu.org; Fri, 04 Jan 2019 00:04:36 -0500 Received: from webmail04.register.com (atl4webmail05pod1.mgt.hosting.qts.netsol.com [10.30.71.134]) by atl4mhob20.registeredsite.com (8.14.4/8.14.4) with ESMTP id x0454Rmj039157 for ; Fri, 4 Jan 2019 00:04:28 -0500 Received: from 100.42.254.37 (SquirrelMail authenticated user luke@gavelfamily.com) by webmail04.register.com with HTTP; Fri, 4 Jan 2019 00:04:28 -0500 Message-ID: <5ec58f0d642baabfce3a437a78c418e5.squirrel@webmail04.register.com> Date: Fri, 4 Jan 2019 00:04:28 -0500 From: luke@gavelfamily.com User-Agent: SquirrelMail/1.4.22 MIME-Version: 1.0 Content-Type: multipart/alternative;boundary="----=_20190104000428_87919" X-Priority: 3 (Normal) Importance: Normal X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.17.115.114 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Spam-Score: -2.4 (--) X-Mailman-Approved-At: Fri, 04 Jan 2019 00:15:20 -0500 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.3 (-----) ------=_20190104000428_87919 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by atl4mhob20.registeredsite.com id x0454Rmj039157 I have to pre-check for an empty set before passing it to grep: =A0 SAVED_RECORDs=3D($(sqlite3 -list -separator '/' files.db "SELECT FileName= FROM Files WHERE ModTime > '2018-12-31'")) #Returns an empty set NEW_RECs=3D($(ls * | grep -vf <(echo ${SAVED_RECORDs[@]} | tr ' ' '\n') #Returns an empty list because grep considers SAVED_RECORD= s to be universal rather than null set Workaround: if [ ${#SAVED_RECORDs[@]} -gt 0 ]; then =A0 NEW_RECs=3D($(ls * | grep -vf <(echo ${SAVED_RECORDs[@]} | tr ' ' '\n= ') #Now returns the expected subtraction of SAVED_RECORDs from NEW_RECs fi ------=_20190104000428_87919 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 8bit

I have to pre-check for an empty set before passing it to grep:

 

SAVED_RECORDs=($(sqlite3 -list -separator '/' files.db "SELECT FileName FROM Files WHERE ModTime > '2018-12-31'")) #Returns an empty set

NEW_RECs=($(ls * | grep -vf <(echo ${SAVED_RECORDs[@]} | tr ' ' '\n') #Returns an empty list because grep considers SAVED_RECORDs to be universal rather than null set

Workaround:

if [ ${#SAVED_RECORDs[@]} -gt 0 ]; then
  NEW_RECs=($(ls * | grep -vf <(echo ${SAVED_RECORDs[@]} | tr ' ' '\n') #Now returns the expected subtraction of SAVED_RECORDs from NEW_RECs
fi

------=_20190104000428_87919-- From unknown Fri Aug 15 17:21:28 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: luke@gavelfamily.com Subject: bug#33972: closed (grep -vf <() filters all rows) Message-ID: References: <5ec58f0d642baabfce3a437a78c418e5.squirrel@webmail04.register.com> X-Gnu-PR-Message: they-closed 33972 X-Gnu-PR-Package: grep Reply-To: 33972@debbugs.gnu.org Date: Thu, 02 Jan 2020 09:05:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1577955902-20497-1" This is a multi-part message in MIME format... ------------=_1577955902-20497-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #33972: grep -vf <() filters all rows which was filed against the grep package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 33972@debbugs.gnu.org. --=20 33972: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D33972 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1577955902-20497-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 33972-done) by debbugs.gnu.org; 2 Jan 2020 09:04:28 +0000 Received: from localhost ([127.0.0.1]:38102 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1imwP6-0005Ji-9k for submit@debbugs.gnu.org; Thu, 02 Jan 2020 04:04:28 -0500 Received: from zimbra.cs.ucla.edu ([131.179.128.68]:45258) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1imwP5-0005JQ-CO for 33972-done@debbugs.gnu.org; Thu, 02 Jan 2020 04:04:27 -0500 Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 11C80160017; Thu, 2 Jan 2020 01:04:22 -0800 (PST) Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 7Sh_LjMIuhSc; Thu, 2 Jan 2020 01:04:21 -0800 (PST) Received: from localhost (localhost [127.0.0.1]) by zimbra.cs.ucla.edu (Postfix) with ESMTP id 6AAA7160054; Thu, 2 Jan 2020 01:04:21 -0800 (PST) X-Virus-Scanned: amavisd-new at zimbra.cs.ucla.edu Received: from zimbra.cs.ucla.edu ([127.0.0.1]) by localhost (zimbra.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id XiKBoQGRhk9q; Thu, 2 Jan 2020 01:04:21 -0800 (PST) Received: from [192.168.1.9] (cpe-23-242-74-103.socal.res.rr.com [23.242.74.103]) by zimbra.cs.ucla.edu (Postfix) with ESMTPSA id 48932160017; Thu, 2 Jan 2020 01:04:21 -0800 (PST) To: luke@gavelfamily.com From: Paul Eggert Subject: grep -vf <() filters all rows Organization: UCLA Computer Science Department Message-ID: Date: Thu, 2 Jan 2020 01:04:21 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 33972-done Cc: 33972-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > I have to pre-check for an empty set before passing it to grep: > ... > Workaround: You're right that the empty pattern matches every line, since every line has an empty string in it somewhere. This is considered to be a feature of grep, not a bug. As you have a workaround I'm closing the bug report. ------------=_1577955902-20497-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 4 Jan 2019 05:15:22 +0000 Received: from localhost ([127.0.0.1]:46141 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gfHpK-0005kG-5A for submit@debbugs.gnu.org; Fri, 04 Jan 2019 00:15:22 -0500 Received: from eggs.gnu.org ([208.118.235.92]:36441) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gfHf1-0005Up-2T for submit@debbugs.gnu.org; Fri, 04 Jan 2019 00:04:43 -0500 Received: from lists.gnu.org ([208.118.235.17]:59524) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gfHf0-0002Tj-NH for submit@debbugs.gnu.org; Fri, 04 Jan 2019 00:04:42 -0500 Received: from eggs.gnu.org ([208.118.235.92]:45668) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gfHez-0000JM-TK for bug-grep@gnu.org; Fri, 04 Jan 2019 00:04:42 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,HTML_MESSAGE, RCVD_IN_DNSWL_NONE autolearn=disabled version=3.3.2 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gfHeu-0002KT-Ue for bug-grep@gnu.org; Fri, 04 Jan 2019 00:04:41 -0500 Received: from atl4mhob20.registeredsite.com ([209.17.115.114]:36146) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gfHeu-0002AV-OU for bug-grep@gnu.org; Fri, 04 Jan 2019 00:04:36 -0500 Received: from webmail04.register.com (atl4webmail05pod1.mgt.hosting.qts.netsol.com [10.30.71.134]) by atl4mhob20.registeredsite.com (8.14.4/8.14.4) with ESMTP id x0454Rmj039157 for ; Fri, 4 Jan 2019 00:04:28 -0500 Received: from 100.42.254.37 (SquirrelMail authenticated user luke@gavelfamily.com) by webmail04.register.com with HTTP; Fri, 4 Jan 2019 00:04:28 -0500 Message-ID: <5ec58f0d642baabfce3a437a78c418e5.squirrel@webmail04.register.com> Date: Fri, 4 Jan 2019 00:04:28 -0500 Subject: grep -vf <() filters all rows From: luke@gavelfamily.com To: bug-grep@gnu.org User-Agent: SquirrelMail/1.4.22 MIME-Version: 1.0 Content-Type: multipart/alternative;boundary="----=_20190104000428_87919" X-Priority: 3 (Normal) Importance: Normal X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.17.115.114 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Spam-Score: -2.4 (--) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Fri, 04 Jan 2019 00:15:20 -0500 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -5.3 (-----) ------=_20190104000428_87919 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by atl4mhob20.registeredsite.com id x0454Rmj039157 I have to pre-check for an empty set before passing it to grep: =A0 SAVED_RECORDs=3D($(sqlite3 -list -separator '/' files.db "SELECT FileName= FROM Files WHERE ModTime > '2018-12-31'")) #Returns an empty set NEW_RECs=3D($(ls * | grep -vf <(echo ${SAVED_RECORDs[@]} | tr ' ' '\n') #Returns an empty list because grep considers SAVED_RECORD= s to be universal rather than null set Workaround: if [ ${#SAVED_RECORDs[@]} -gt 0 ]; then =A0 NEW_RECs=3D($(ls * | grep -vf <(echo ${SAVED_RECORDs[@]} | tr ' ' '\n= ') #Now returns the expected subtraction of SAVED_RECORDs from NEW_RECs fi ------=_20190104000428_87919 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 8bit

I have to pre-check for an empty set before passing it to grep:

 

SAVED_RECORDs=($(sqlite3 -list -separator '/' files.db "SELECT FileName FROM Files WHERE ModTime > '2018-12-31'")) #Returns an empty set

NEW_RECs=($(ls * | grep -vf <(echo ${SAVED_RECORDs[@]} | tr ' ' '\n') #Returns an empty list because grep considers SAVED_RECORDs to be universal rather than null set

Workaround:

if [ ${#SAVED_RECORDs[@]} -gt 0 ]; then
  NEW_RECs=($(ls * | grep -vf <(echo ${SAVED_RECORDs[@]} | tr ' ' '\n') #Now returns the expected subtraction of SAVED_RECORDs from NEW_RECs
fi

------=_20190104000428_87919-- ------------=_1577955902-20497-1--