grep: Fix -f FILE when FILE is empty and -x provided
Grep currently special-cased empty pattern file to be the same as pattern file with one empty line (empty pattern). That does mirror how GNU grep behaves, except when -x is provided. In that case .* pattern needs to be used instead. Signed-off-by: Gray Wolf <wolf@wolfsden.cz> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
1c462d47a0
commit
c3295d233b
@ -762,8 +762,9 @@ int grep_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
if (option_mask32 & OPT_f) {
|
if (option_mask32 & OPT_f) {
|
||||||
load_regexes_from_file(fopt);
|
load_regexes_from_file(fopt);
|
||||||
if (!pattern_head) { /* -f EMPTY_FILE? */
|
if (!pattern_head) { /* -f EMPTY_FILE? */
|
||||||
/* GNU grep treats it as "nothing matches" */
|
/* GNU grep treats it as "nothing matches" except when -x */
|
||||||
llist_add_to(&pattern_head, new_grep_list_data((char*) "", 0));
|
const char *data = (option_mask32 & OPT_x) ? ".*" : "";
|
||||||
|
llist_add_to(&pattern_head, new_grep_list_data((char*)data, 0));
|
||||||
invert_search ^= 1;
|
invert_search ^= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -129,6 +129,12 @@ testing "grep -v -f EMPTY_FILE" \
|
|||||||
"" \
|
"" \
|
||||||
"test\n"
|
"test\n"
|
||||||
|
|
||||||
|
testing "grep -vxf EMPTY_FILE" \
|
||||||
|
"grep -vxf input" \
|
||||||
|
"test\n" \
|
||||||
|
"" \
|
||||||
|
"test\n"
|
||||||
|
|
||||||
testing "grep -Fw matches only words" \
|
testing "grep -Fw matches only words" \
|
||||||
"grep -Fw foo input" \
|
"grep -Fw foo input" \
|
||||||
"" \
|
"" \
|
||||||
|
Loading…
Reference in New Issue
Block a user