Греп – ^ (\ s * $) vs ^ \ s * $

Я хочу найти поле, в котором есть только пробелы. Считая, что эти две команды дали мне разные результаты:

grep "^\s*$" -E -c grep "^(\s*$)" -E -c 

Еще одна вещь. Каков правильный способ сказать «пространства только или что-то другое»:

 grep "^(\s*$|STRING)" -E -c 

или

 grep "(^\s*$|^STRING)" -E -c 

Или они эквивалентны?

  • Как удалить имя из фамилии, когда длина неизвестна?
  • Как проверить процесс вместе с его аргументами в списке процессов?
  • завиток и wget отрезать URL-адрес
  • Переупорядочение файла на основе второго файла
  • Использование -n и -z в тестировании встроено - Bash
  • хранить и выполнять команду redirection / piped в скрипте
  • Автоматизация ввода текста из сценария bash без использования EOF
  • Как избежать отправки EOF из запроса на разбор скриптов и отправки ответов на netcat
  • One Solution collect form web for “Греп – ^ (\ s * $) vs ^ \ s * $”

    Обычный grep не понимает \s или круглые скобки. (*) Вы хотите, чтобы grep -P доступен, или grep -E / egrep и write \s out как [ ^I] (где ^ITab , grep без -P doesn Не понимаю. Кроме того, с двойными кавычками некоторые оболочки будут обрабатывать \s и оставлять только s ; вы всегда должны использовать одинарные кавычки с регулярными выражениями из оболочки, за исключением случаев, когда вам действительно нужно интерполировать переменную (например, что-то вроде '^\s*'"$foo"'\s+\(' , переключение цитирования в среднем параметре) ,

    Альтернативы в вашем втором примере (опять же, с -P и одинарным цитированием вместо double) делают то же самое. Первое технически лучше, потому что grep не будет отступать так же сильно, но практически это не имеет значения.

    (*) педантизм: спин-шрамы-парсеры будут работать, снова требуя одинарного цитирования, чтобы оболочка не ест обратную косую черту. egrep обычно проще.

    Linux и Unix - лучшая ОС в мире.