При захвате файла grep возвращает true вместо строк, почему?

Вы только передаете ошибки по каналу к/dev/null, если Вы хотите предотвратить эхо arp-сканирования, дают весь вывод/dev/null и перезапускают последовательность задания.

1
09.07.2013, 15:58
3 ответа

Похоже, что grep думает, что Ваш XML-файл является двоичным, а не текст.

Если Вы хотите вынудить grep рассматривать Ваш файл как текст независимо от содержания, можно использовать --text переключатель (принимающий GNU grep), как так:

grep --text "searchString" ./file.xml | wc -l

Обратите внимание, что, если все Вы хотите, должен считать соответствия, вероятно, лучше использовать grep --count вместо того, чтобы передавать по каналу через wc -l, сохранение Вас канал и вызов процесса.

12
27.01.2020, 23:11
  • 1
    @MichaelKjörling grep --count также возвратит количество строк. От человека: -c, --count Suppress normal output; instead print a count of matching lines for each input file. –  rush 09.07.2013, 16:31
  • 2
    @rush Argh, Вы правы. Извините, не берите в голову это затем. –  a CVn 09.07.2013, 16:34

Похож существуют некоторые редкие символы в начале Вашего файла и grep обнаруживает его как двоичный файл. Можно попробовать --binary-files=text опция.

grep --binary-files=text "searchString" file.xml | wc -l

Из страницы справочника:

   --binary-files=TYPE
          If the first few bytes of a file indicate that the file contains
          binary  data, assume that the file is of type TYPE.  By default,
          TYPE is binary, and grep  normally  outputs  either  a  one-line
          message  saying  that  a  binary  file matches, or no message if
          there is no match.  If TYPE is without-match, grep assumes  that
          a  binary  file  does  not  match;  this is equivalent to the -I
          option.  If TYPE is text, grep processes a binary file as if  it
          were  text;  this is equivalent to the -a option.  Warning: grep
          --binary-files=text might output binary garbage, which can  have
          nasty  side  effects  if  the  output  is  a terminal and if the
          terminal driver interprets some of it as commands.
2
27.01.2020, 23:11
  • 1
    Или почти эквивалентно grep -a -c 'searchString' file.xml и избегайте лишнего wc -l. –  tripleee 09.07.2013, 16:26
  • 2
    Просто возвратов каретки DOS достаточно для превращения файла в "двоичный файл". –  tripleee 09.07.2013, 16:40
  • 3
    @tripleee, чтобы Не быть гнидой, но я думал, что уже сказал что :) –  a CVn 09.07.2013, 16:40
  • 4
    @MikaelKjörling: После того, как я добавил свой комментарий, да. Ваш - теперь лучший ответ, таким образом, Вы получили мой голос. –  tripleee 09.07.2013, 16:42

Похоже, что у Вас есть ошибка при использовании ./file.xml. Если Вы пробуете:

grep "searchString" file.xml | wc -l

Это имеет какие-либо проблемы?

-3
27.01.2020, 23:11
  • 1
    file.xml и ./file.xml обратитесь к точно тому же файлу, с дополнительной системой поддержки это в последнем случае, настоящем имени file.xml может безопасно начаться, например. -. –  a CVn 09.07.2013, 16:09
  • 2
    , не собирающийся провалить, но выше комментария, не является правильным никакое различие между тем, что Вы имеете и что я попробовал. –  Dan Ciborowski - MSFT 09.07.2013, 16:18

Теги

Похожие вопросы