Why do I get “Binary file matches” with grep -I?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
In the following example, grep
behaves strangely: it's supplied with -I
option, which, according to man page, should make grep
ignore binary files (similarly to --binary-files=without-match
), but I still get the "Binary file matches" output.
$ cat <<'EOF' | uudecode > test-file
begin 664 /dev/stdout
M>`&5SLU*Q$`0!&#/>8J^"TM/=^8/1%2>1`>.^9Z=D-9!))9@7?WBB^@%"G
MHOBHO+8V=2!'-WU3A9PX%*8PBB:VGK@6)Y*HFAB(.2;.;$SQPX=LNG3(>2SH
MDJE!5;R+E9P21J::8U2+?@R>RK&7:[^L&[Q=]UD6>)$D?9<O_82[Y$&S4_,
MP[G)-)_RVN[!6(S.>F0/MB(P]$>5[O^%_$8+/(?,CSI+]%DD;/"^^,K3`OD
,6?8=GK6MPS?WDU!"
`
end
EOF
$ grep -I 8 test-file
Binary file test-file matches
$ grep --binary-files=without-match 8 test-file
Binary file test-file matches
Apparently, grep
considers the file binary, but still does try to match and reports the results with it. Why is the "binary file" not ignored as the -I
option prescribes?
I'm using GNU grep 3.1 on Ubuntu 18.04.
grep binary
add a comment |
In the following example, grep
behaves strangely: it's supplied with -I
option, which, according to man page, should make grep
ignore binary files (similarly to --binary-files=without-match
), but I still get the "Binary file matches" output.
$ cat <<'EOF' | uudecode > test-file
begin 664 /dev/stdout
M>`&5SLU*Q$`0!&#/>8J^"TM/=^8/1%2>1`>.^9Z=D-9!))9@7?WBB^@%"G
MHOBHO+8V=2!'-WU3A9PX%*8PBB:VGK@6)Y*HFAB(.2;.;$SQPX=LNG3(>2SH
MDJE!5;R+E9P21J::8U2+?@R>RK&7:[^L&[Q=]UD6>)$D?9<O_82[Y$&S4_,
MP[G)-)_RVN[!6(S.>F0/MB(P]$>5[O^%_$8+/(?,CSI+]%DD;/"^^,K3`OD
,6?8=GK6MPS?WDU!"
`
end
EOF
$ grep -I 8 test-file
Binary file test-file matches
$ grep --binary-files=without-match 8 test-file
Binary file test-file matches
Apparently, grep
considers the file binary, but still does try to match and reports the results with it. Why is the "binary file" not ignored as the -I
option prescribes?
I'm using GNU grep 3.1 on Ubuntu 18.04.
grep binary
add a comment |
In the following example, grep
behaves strangely: it's supplied with -I
option, which, according to man page, should make grep
ignore binary files (similarly to --binary-files=without-match
), but I still get the "Binary file matches" output.
$ cat <<'EOF' | uudecode > test-file
begin 664 /dev/stdout
M>`&5SLU*Q$`0!&#/>8J^"TM/=^8/1%2>1`>.^9Z=D-9!))9@7?WBB^@%"G
MHOBHO+8V=2!'-WU3A9PX%*8PBB:VGK@6)Y*HFAB(.2;.;$SQPX=LNG3(>2SH
MDJE!5;R+E9P21J::8U2+?@R>RK&7:[^L&[Q=]UD6>)$D?9<O_82[Y$&S4_,
MP[G)-)_RVN[!6(S.>F0/MB(P]$>5[O^%_$8+/(?,CSI+]%DD;/"^^,K3`OD
,6?8=GK6MPS?WDU!"
`
end
EOF
$ grep -I 8 test-file
Binary file test-file matches
$ grep --binary-files=without-match 8 test-file
Binary file test-file matches
Apparently, grep
considers the file binary, but still does try to match and reports the results with it. Why is the "binary file" not ignored as the -I
option prescribes?
I'm using GNU grep 3.1 on Ubuntu 18.04.
grep binary
In the following example, grep
behaves strangely: it's supplied with -I
option, which, according to man page, should make grep
ignore binary files (similarly to --binary-files=without-match
), but I still get the "Binary file matches" output.
$ cat <<'EOF' | uudecode > test-file
begin 664 /dev/stdout
M>`&5SLU*Q$`0!&#/>8J^"TM/=^8/1%2>1`>.^9Z=D-9!))9@7?WBB^@%"G
MHOBHO+8V=2!'-WU3A9PX%*8PBB:VGK@6)Y*HFAB(.2;.;$SQPX=LNG3(>2SH
MDJE!5;R+E9P21J::8U2+?@R>RK&7:[^L&[Q=]UD6>)$D?9<O_82[Y$&S4_,
MP[G)-)_RVN[!6(S.>F0/MB(P]$>5[O^%_$8+/(?,CSI+]%DD;/"^^,K3`OD
,6?8=GK6MPS?WDU!"
`
end
EOF
$ grep -I 8 test-file
Binary file test-file matches
$ grep --binary-files=without-match 8 test-file
Binary file test-file matches
Apparently, grep
considers the file binary, but still does try to match and reports the results with it. Why is the "binary file" not ignored as the -I
option prescribes?
I'm using GNU grep 3.1 on Ubuntu 18.04.
grep binary
grep binary
asked Apr 2 at 10:22
RuslanRuslan
1,3841427
1,3841427
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Looking at the grep manual, this seems to be because (bold mine):
If type is ‘
without-match
’, when grep discovers null input binary data
it assumes that the rest of the file does not match; this is
equivalent to the-I
option.
However, grep also considers other data as indicating binary files:
Non-text bytes indicate binary data; these are either output bytes
that are improperly encoded for the current locale (see Environment
Variables), or null input bytes when the-z
(--null-data
)
option is not given (see Other Options).
So the message won't be printed if:
- the
-I
/--binary-files=without-match
options are given
and the binary-ness is due to null bytes.
However, that's not the case with the example input. The example file is treated as binary because it doesn't fit the current locale (probably some UTF locale), not because it has null bytes. Otherwise:
% LC_ALL=C grep 8 test-file
x���J�@`�y��
dIf��(��P������6u G7}S��8�0�&���'����9&�lL�Çl�t�y,蒩AU����F��cT�~
�ʱ�k��]�Yx�$}�/����O�O�ù�4�����X��zd�Ȉ��W���,�2<�/�d�����+L
�Y�����7��PB
If I add a null byte to the file, grep fails successfully:
% printf '' >> test-file
% grep -I 8 test-file
% echo $?
1
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f510044%2fwhy-do-i-get-binary-file-matches-with-grep-i%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Looking at the grep manual, this seems to be because (bold mine):
If type is ‘
without-match
’, when grep discovers null input binary data
it assumes that the rest of the file does not match; this is
equivalent to the-I
option.
However, grep also considers other data as indicating binary files:
Non-text bytes indicate binary data; these are either output bytes
that are improperly encoded for the current locale (see Environment
Variables), or null input bytes when the-z
(--null-data
)
option is not given (see Other Options).
So the message won't be printed if:
- the
-I
/--binary-files=without-match
options are given
and the binary-ness is due to null bytes.
However, that's not the case with the example input. The example file is treated as binary because it doesn't fit the current locale (probably some UTF locale), not because it has null bytes. Otherwise:
% LC_ALL=C grep 8 test-file
x���J�@`�y��
dIf��(��P������6u G7}S��8�0�&���'����9&�lL�Çl�t�y,蒩AU����F��cT�~
�ʱ�k��]�Yx�$}�/����O�O�ù�4�����X��zd�Ȉ��W���,�2<�/�d�����+L
�Y�����7��PB
If I add a null byte to the file, grep fails successfully:
% printf '' >> test-file
% grep -I 8 test-file
% echo $?
1
add a comment |
Looking at the grep manual, this seems to be because (bold mine):
If type is ‘
without-match
’, when grep discovers null input binary data
it assumes that the rest of the file does not match; this is
equivalent to the-I
option.
However, grep also considers other data as indicating binary files:
Non-text bytes indicate binary data; these are either output bytes
that are improperly encoded for the current locale (see Environment
Variables), or null input bytes when the-z
(--null-data
)
option is not given (see Other Options).
So the message won't be printed if:
- the
-I
/--binary-files=without-match
options are given
and the binary-ness is due to null bytes.
However, that's not the case with the example input. The example file is treated as binary because it doesn't fit the current locale (probably some UTF locale), not because it has null bytes. Otherwise:
% LC_ALL=C grep 8 test-file
x���J�@`�y��
dIf��(��P������6u G7}S��8�0�&���'����9&�lL�Çl�t�y,蒩AU����F��cT�~
�ʱ�k��]�Yx�$}�/����O�O�ù�4�����X��zd�Ȉ��W���,�2<�/�d�����+L
�Y�����7��PB
If I add a null byte to the file, grep fails successfully:
% printf '' >> test-file
% grep -I 8 test-file
% echo $?
1
add a comment |
Looking at the grep manual, this seems to be because (bold mine):
If type is ‘
without-match
’, when grep discovers null input binary data
it assumes that the rest of the file does not match; this is
equivalent to the-I
option.
However, grep also considers other data as indicating binary files:
Non-text bytes indicate binary data; these are either output bytes
that are improperly encoded for the current locale (see Environment
Variables), or null input bytes when the-z
(--null-data
)
option is not given (see Other Options).
So the message won't be printed if:
- the
-I
/--binary-files=without-match
options are given
and the binary-ness is due to null bytes.
However, that's not the case with the example input. The example file is treated as binary because it doesn't fit the current locale (probably some UTF locale), not because it has null bytes. Otherwise:
% LC_ALL=C grep 8 test-file
x���J�@`�y��
dIf��(��P������6u G7}S��8�0�&���'����9&�lL�Çl�t�y,蒩AU����F��cT�~
�ʱ�k��]�Yx�$}�/����O�O�ù�4�����X��zd�Ȉ��W���,�2<�/�d�����+L
�Y�����7��PB
If I add a null byte to the file, grep fails successfully:
% printf '' >> test-file
% grep -I 8 test-file
% echo $?
1
Looking at the grep manual, this seems to be because (bold mine):
If type is ‘
without-match
’, when grep discovers null input binary data
it assumes that the rest of the file does not match; this is
equivalent to the-I
option.
However, grep also considers other data as indicating binary files:
Non-text bytes indicate binary data; these are either output bytes
that are improperly encoded for the current locale (see Environment
Variables), or null input bytes when the-z
(--null-data
)
option is not given (see Other Options).
So the message won't be printed if:
- the
-I
/--binary-files=without-match
options are given
and the binary-ness is due to null bytes.
However, that's not the case with the example input. The example file is treated as binary because it doesn't fit the current locale (probably some UTF locale), not because it has null bytes. Otherwise:
% LC_ALL=C grep 8 test-file
x���J�@`�y��
dIf��(��P������6u G7}S��8�0�&���'����9&�lL�Çl�t�y,蒩AU����F��cT�~
�ʱ�k��]�Yx�$}�/����O�O�ù�4�����X��zd�Ȉ��W���,�2<�/�d�����+L
�Y�����7��PB
If I add a null byte to the file, grep fails successfully:
% printf '' >> test-file
% grep -I 8 test-file
% echo $?
1
answered Apr 2 at 10:41
murumuru
37.3k589164
37.3k589164
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f510044%2fwhy-do-i-get-binary-file-matches-with-grep-i%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown