Недетерминированное поведение Grep в сочетании с Подробнее
Что бы вы ожидали после этого:
for /l %i in (1,1,100) do @more some.bbl | grep a | md5sum
Скорее всего, не это:
ec3ecb76408d4225ff23a25d0596e00f *- 13cfd899b90b9cd7aedb406a785e8eac *- 737e8898a65657f1a2ce8012ff1ffe82 *- d4095243e56a7da3b31a352423a5417a *- 319db7810e677414ca1609238bdeba6f *- 31e626a8ce0732fda1fa7499c8b13dfa *- 006fe390f923d50348d65d0bbefa64d8 *- 77708f62cb2d61a45788a656d0979aee *- cda10a9ab71c2bce4df069c479241349 *- b01b71dc7dca11808ca989c4985513ca *- c22a6f8b1cac9a93c4fe10b07a9f483a *- 0b04f4b24f3f183270eb7414f4f86e3d *- 5a2f8b8ad482ae8f70b7ce3384a7c9e2 *- beccdbe737b48c02b48c4524cd89eede *- a16fec5238cfe8dfff6b403ff943a8ca *- ec0cd2edc0009abd14119915a8b563f4 *- 1e78f0012ca09aeade169f815415da40 *- ...
Я тоже волновалась, поэтому я провела пару проверок вменяемости:
for /l %i in (1,1,100) do @more some.bbl | md5sum
дает 100 раз
ace4f37f3a1433e29696a535c0b79f2c *-
То же самое для
for /l %i in (1,1,100) do @grep a some.bbl | md5sum
а также
d8753d755025a1119cd2910c6f5cb0de *-
Так что more
, grep
и md5sum
отлично работают сами по себе. Кроме того, труба перед md5sum
не является проблемой, так как
for /l %i in (1,1,100) do @more some.bbl | grep a > out%i md5sum out*
подтверждает проблему. fc
По выводам я не вижу разницы. diff
при их использовании обнаруживаются невидимые различия, подтвержденные шестнадцатеричным редактором как различия в окончаниях строк в, казалось бы, случайных местах (и отличающихся от файла к файлу).
Проблема все еще видна, но не так часто, в этом примере:
for /l %i in (1,1,100) do @more some.bbl | grep "[a-z]" | md5sum
получая
b135bcfe0bcfb7f1c43fe1905164c31e *- b135bcfe0bcfb7f1c43fe1905164c31e *- b135bcfe0bcfb7f1c43fe1905164c31e *- b135bcfe0bcfb7f1c43fe1905164c31e *- ef23817185d41987c11cb1fc4371bb76 *- b135bcfe0bcfb7f1c43fe1905164c31e *- b135bcfe0bcfb7f1c43fe1905164c31e *- b135bcfe0bcfb7f1c43fe1905164c31e *- e398e63b60cee3e271967f01350068f1 *- b135bcfe0bcfb7f1c43fe1905164c31e *- b135bcfe0bcfb7f1c43fe1905164c31e *- b135bcfe0bcfb7f1c43fe1905164c31e *- ...
Теперь у меня заканчиваются идеи, в чем причина. Мне было бы все равно, если бы я не потерял ни одной действительной строки в таких случаях:
for /l %i in (1,1,100) do @more "some.bbl" | grep "\}$" | wc -l
Это дает
249 249 249 248 255 253 252 248 251 ...
Чтобы воспроизвести похожие проблемы, вы можете использовать этот файл
for /l %i in (1,1,200) do @echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX>> some.bbl
Еще немного информации
C:\>ver Microsoft Windows [Version 6.1.7601] C:\>more /h Displays output one screen at a time. MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename ... C:\>grep --ver GNU grep 2.6.3 Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. C:\>md5sum --ver md5sum (GNU coreutils) 8.15 Packaged by Cygwin (8.15-1) Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Ulrich Drepper, Scott Miller, and David Madore.
Почему это происходит?
Обновление: проблема также уходит, заменяя more
это cat
:
C:\>cat --ver cat (GNU coreutils) 8.15 Packaged by Cygwin (8.15-1) Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Torbjörn Granlund and Richard M. Stallman.
0 ответов на вопрос
Похожие вопросы
-
12
Почему папка / winsxs становится такой большой и ее можно уменьшить?
-
2
Повышенные привилегии для запуска приложений в Windows?
-
14
PDF Viewer в Windows
-
-
7
Какие службы Windows можно безопасно отключить?
-
8
Firefox PDF плагин для просмотра PDF в браузере на Windows
-
1
Windows теряет макет экрана
-
1
Есть ли способ предотвратить установку / обновление, чтобы засорять мой жесткий диск загадочными пап...
-
1
Как я могу получить доступ к принтеру Windows Vista из Ubuntu по сети?
-
6
Просмотр журнала в Windows
-
3
Фоновая проблема Windows с двумя экранами