Что такое хорошие grep инструменты для Windows? [закрытый]

Что такое NullPointerException?

Хорошим местом для начала является JavaDocs . Они охватывают это:

Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра нулевого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Выполнение длины null, как если бы это был массив.
  • Доступ или изменение слотов с нулевым значением, как если бы это был массив.
  • Бросать нуль, как если бы это было значение Throwable.

Приложения должны бросать экземпляры этого класса для указания других незаконных видов использования нулевого объекта.

blockquote>

Также, если вы попытаетесь использовать нулевую ссылку с synchronized, который также выдаст это исключение, за JLS :

SynchronizedStatement:
    synchronized ( Expression ) Block
  • В противном случае, если значение выражения равно null, NullPointerException.
blockquote>

Как это исправить?

Итак, у вас есть NullPointerException. Как вы это исправите? Возьмем простой пример, который выдает NullPointerException:

public class Printer {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print();
    }
}

Идентифицирует нулевые значения

. Первый шаг - точно определить , значения которого вызывают исключение . Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace . Это покажет вам, где было выбрано исключение:

Exception in thread "main" java.lang.NullPointerException
    at Printer.printString(Printer.java:13)
    at Printer.print(Printer.java:9)
    at Printer.main(Printer.java:19)

Здесь мы видим, что исключение выбрано в строке 13 (в методе printString). Посмотрите на строку и проверьте, какие значения равны нулю, добавив протоколирующие операторы или используя отладчик . Мы обнаруживаем, что s имеет значение null, а вызов метода length на него вызывает исключение. Мы видим, что программа перестает бросать исключение, когда s.length() удаляется из метода.

Трассировка, где эти значения взяты из

Затем проверьте, откуда это значение. Следуя вызовам метода, мы видим, что s передается с printString(name) в методе print(), а this.name - null.

Трассировка, где эти значения должны быть установлены

Где установлен this.name? В методе setName(String). С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте порядок , что эти методы вызывают, а метод set не будет называться после методом печати. ​​

Этого достаточно, чтобы дать нам решение: добавить вызов printer.setName() перед вызовом printer.print().

Другие исправления

Переменная может иметь значение по умолчанию setName может помешать ему установить значение null):

private String name = "";

Либо метод print, либо printString может проверить значение null например:

printString((name == null) ? "" : name);

Или вы можете создать класс, чтобы name всегда имел ненулевое значение :

public class Printer {
    private final String name;

    public Printer(String name) {
        this.name = Objects.requireNonNull(name);
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer("123");
        printer.print();
    }
}

См. также:

Я все еще не могу найти проблему

Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но не забудьте включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE ).

290
задан Portman 26 July 2013 в 06:47
поделиться

14 ответов

На основе рекомендаций в комментариях я начал использовать grepWin, и это фантастически и свободный .

<час>

(я - все еще поклонник PowerGREP, но я больше не использую его.)

я знаю, что Вы уже упомянули его, но PowerGREP потрясающий .

Некоторые мои любимые функции:

  • Щелкают правой кнопкой по папке для выполнения PowerGREP на нем
  • , регулярные выражения Использования или буквенный текст
  • Определяют подстановочные знаки для файлов для включения & исключите
  • Поиск & замена
  • режим Preview хорош, потому что можно удостовериться, что Вы заменяете то, что Вы намереваетесь.

Теперь я понимаю, что другие grep инструменты могут сделать все вышеупомянутое. Это просто что пакеты PowerGREP вся функциональность в очень простой в использовании GUI.

От тех же замечательных людей, которые принесли Вам RegexBuddy и с кем у меня нет союза вне любви их материала. (Нужно отметить, что RegexBuddy включает базовую версию grep (для Windows) самого и это стоит намного меньше, чем PowerGREP.)

<час>

Дополнительные решения

Существующие команды Windows

Linux команды в Windows

Grep с графическим интерфейсом

Additional Grep

198
ответ дан 9 revs, 6 users 36% 23 November 2019 в 01:42
поделиться

Июль 2013 обновления:

Другой grep инструмент я теперь использую все время в Windows, AstroGrep:

AstroGrep awesomeness

Его способность показать мне больше, чем просто поиск строки (т.е. - context=NUM командной строки grep) неоценима.
И это быстро. Очень быстро, даже на старом компьютере с не - диск SSD (я знаю, они раньше делали этот жесткий диск с [1 113] вращение диски, названные диски , сумасшедшее право?)

Это свободно.
Это портативно (простой архив zip для разархивации).

<час>

Исходный октябрь 2008 ответа

alt text гну Grep в порядке

, можно загрузить его, например, здесь: ( сайт ftp )

Весь обычные опции здесь.

, Что, объединенный с простофиля и xargs (включает, 'находят', от GnuWin32), и можно действительно написать сценарий как Вы, были на Unix!

Видят также эти опции, которые я использую для grep рекурсивно :

grep --include "*.xxx" -nRHI "my Text to grep" *
52
ответ дан 6 revs 23 November 2019 в 01:42
поделиться

FINDSTR довольно мощен, поддерживает регулярные выражения и уже имеет преимущества того, чтобы быть на всех машинах Windows.

c:\> FindStr /?

Searches for strings in files.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
        [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
        strings [[drive:][path]filename[ ...]]

  /B         Matches pattern if at the beginning of a line.
  /E         Matches pattern if at the end of a line.
  /L         Uses search strings literally.
  /R         Uses search strings as regular expressions.
  /S         Searches for matching files in the current directory and all
             subdirectories.
  /I         Specifies that the search is not to be case-sensitive.
  /X         Prints lines that match exactly.
  /V         Prints only lines that do not contain a match.
  /N         Prints the line number before each line that matches.
  /M         Prints only the filename if a file contains a match.
  /O         Prints character offset before each matching line.
  /P         Skip files with non-printable characters.
  /OFF[LINE] Do not skip files with offline attribute set.
  /A:attr    Specifies color attribute with two hex digits. See "color /?"
  /F:file    Reads file list from the specified file(/ stands for console).
  /C:string  Uses specified string as a literal search string.
  /G:file    Gets search strings from the specified file(/ stands for console).
  /D:dir     Search a semicolon delimited list of directories
  strings    Text to be searched for.
  [drive:][path]filename
             Specifies a file or files to search.

Use spaces to separate multiple search strings unless the argument is prefixed
with /C.  For example, 'FINDSTR "hello there" x.y' searches for "hello" or
"there" in file x.y.  'FINDSTR /C:"hello there" x.y' searches for
"hello there" in file x.y.

Regular expression quick reference:
  .        Wildcard: any character
  *        Repeat: zero or more occurances of previous character or class
  ^        Line position: beginning of line
  $        Line position: end of line
  [class]  Character class: any one character in set
  [^class] Inverse class: any one character not in set
  [x-y]    Range: any characters within the specified range
  \x       Escape: literal use of metacharacter x
  \<xyz    Word position: beginning of word
  xyz\>    Word position: end of word

использование В качестве примера: findstr text_to_find * или искать рекурсивно findstr /s text_to_find *

317
ответ дан 4 revs, 3 users 83% 23 November 2019 в 01:42
поделиться

Избранная строка PowerShell подобна, это не те же опции и семантика, но это все еще мощно.

2
ответ дан Jim Deville 23 November 2019 в 01:42
поделиться

UnxUtils является тем, который я использую, работы отлично для меня...

3
ответ дан Johan 23 November 2019 в 01:42
поделиться

Я успешно использовал утилиты GNU для Win32 в течение достаточно долгого времени, и он имеет хороший grep, а также хвост и другую удобную гну utils для win32. Я избегаю упакованной оболочки и просто использую исполняемые файлы прямо в win32 командной строке.

Хвост, который упаковывается, является вполне хорошим небольшим приложением также.

7
ответ дан user17314 23 November 2019 в 01:42
поделиться

Ну, около порта Windows GNU grep в:

http://gnuwin32.sourceforge.net/

существует также grep Borland (очень похожий на GNU один) доступный в бесплатном программном обеспечении Бесплатный Компилятор C++ Borland (это - бесплатное программное обеспечение с инструментами командной строки).

7
ответ дан Milan Babuškov 23 November 2019 в 01:42
поделиться

Я всегда использую WinGREP, но у меня были проблемы с ним не отпускающий файлов.

7
ответ дан Tom Kidd 23 November 2019 в 01:42
поделиться

ack работает хорошо над Windows (если Вы имеете Perl). Я нахожу его лучше, чем grep для многого использования.

14
ответ дан 2 revs, 2 users 71% 23 November 2019 в 01:42
поделиться

Cygwin включает grep. Вся AMD инструментов GNU материал Unix работает отлично в Windows при установке Cygwin.

http://www.cygwin.com/

14
ответ дан Corey Goldberg 23 November 2019 в 01:42
поделиться

Baregrep ( Baretail хорош также)

19
ответ дан John Sheehan 23 November 2019 в 01:42
поделиться

Это не может точно попасть в 'grep' категорию, но я не мог продвинуться в Windows без утилиты, названной AgentRansack. Это - находящееся в gui, "находят в файлах" утилиту с поддержкой regex. Это очень просто, чтобы щелкнуть правой кнопкой по папке, совершить нападки, "роются.." и найдите файлы, содержащие, что Вы ищете. Чрезвычайно быстро также.

23
ответ дан jasonmray 23 November 2019 в 01:42
поделиться

Избранная Строка PowerShell cmdlet была прекрасна в v1.0, но значительно лучше для v2.0. Встраивание PowerShell к последним версиям Windows означает, что Ваши навыки здесь всегда будут полезный без первой установки чего-то.

Новые параметры, добавленные к Избранной Строке : Избранная Строка cmdlet теперь поддерживает новые параметры, такие как:

  • - Контекст: Это позволяет Вам видеть строки прежде и после строки соответствия
  • -AllMatches: который позволяет Вам видеть все соответствия в строке (Ранее, Вы видели только первое соответствие в строке)
  • -NotMatch: Эквивалентный grep-v o
  • - Кодирование: для определения кодировки символов

, я нахожу его целесообразным для создания функции gcir для Get-ChildItem -Recurse . с умом для передачи параметров правильно и псевдонима ss для Select-String. Так Вы запись:

gcir *.txt | ss нечто

30
ответ дан Jay Bazuzi 23 November 2019 в 01:42
поделиться

Прошло уже несколько лет с тех пор, как вы задавали этот вопрос, но я бы рекомендовал AstroGrep (http://astrogrep.sourceforge.net).

Он бесплатный, с открытым исходным кодом и простым интерфейсом. Я постоянно использую его для поиска кода.

17
ответ дан 23 November 2019 в 01:42
поделиться
Другие вопросы по тегам:

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