
GNU grep 2.6.3
Linux версия 2.6.32-220.el6.i686 (Red Hat 4.4.6-3)
У меня есть файл .dat, с которым grep не работает. Это обычный текст, который может быть прочитан всеми стандартными командами вывода, например, "less", "cat" и т. д., поэтому я знаю, что он содержит.
Если я выполняю grep по фразе, в наличии которой я точно знаю, то ничего не возвращается, как будто ничего не найдено.
Странность в том, что если я просто переименую его с другим расширением, например file.dat.txt
, grep теперь будет работать нормально. Если я переименую его обратно в file.dat
grep снова ничего не найдет.
Я также создал файл .dat просто командой echo:
echo "grep this" > test.dat
И все равно grep "grep" test.dat
ничего не вернул.
Но после mv test.dat test.dat.txt
, now grep "grep" test.dat.txt
заработало просто отлично.
Достаточно простое решение (переименовать файл), но мне показалось, что это странное поведение.
решение1
Это ненормальное поведение, и я не могу воспроизвести проблему на своих машинах Ubuntu или Centos.
Весьма вероятно, что GREP_OPTIONS
в вашем bashrc (или bash_profile, profile и т. д.) установлено игнорирование *.dat.
Чтобы убедиться в этом, просто выведите переменную env:
echo $GREP_OPTIONS
Где-то в выводе вы должны увидеть-exclude=*.dat
EDIT: Как предположил Фокс в комментариях, это также может быть псевдонимом, тогда он command -v grep
должен отображаться -exclude=*.dat
где-то в его выводе.