Grep - ^ (\s* $) по сравнению с ^\\s* $

Если Ваша оболочка использует readline (который имеет место для bash) можно сделать что-то как нажатие ATL +. вместе?

Из документации Readline GNU:

последний аргумент рывка (M-. или M-_)

Вставьте последний аргумент предыдущей команде (последнее слово предыдущей записи истории). С аргументом ведите себя точно как энный аргумент рывка. Последовательные вызовы к последнему аргументу рывка пятятся через список предыстории, вставляя последний аргумент каждой строки в свою очередь.

3
17.04.2011, 21:34
1 ответ

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

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

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

5
27.01.2020, 21:17
  • 1
    В то время как общие рекомендации для использования одинарных кавычек являются правильными, в данном случае, они не имеют значения: ) и | не односимвольные переменные, таким образом, оболочка не интерполирует $) или $|; и "\s" расширяется до \s, обратная косая черта в двойных кавычках сохраняется кроме прежде "$\`. –  Gilles 'SO- stop being evil' 17.04.2011, 21:02
  • 2
    @geekosaur я использовал-E опцию, но я забыл включать его здесь. Я отредактирую сообщение. В этом случае, почему эти две опции дают мне различные результаты? Сингл по сравнению с двойными кавычками может влиять на это? –  user6678 17.04.2011, 21:02
  • 3
    @Gilles: это, оказывается, зависит от оболочки; я только что получил 3 различных поведения от трех различных оболочек. –  geekosaur 17.04.2011, 21:16
  • 4
    @user6678: посмотрите мой ответ Gilles; это зависит от оболочки (но это появляется это в bash двойные кавычки должны быть хорошо; это - все еще дурная привычка, которая может привести к проблемам в будущем, хотя). \s не поддерживается grep -E в любой версии GNU grep Я имею в наличии (проверил OSX и Индивидуалиста Ubuntu). Тем не менее я ожидал бы, что они будут вести себя то же (если неправильно), и они делают, таким образом, здесь. –  geekosaur 17.04.2011, 21:21
  • 5
    Более новые версии плоскости grep на самом деле понимают \s. grep -c '\s' <<<' ' == 1. –  Quolonel Questions 11.03.2015, 13:17

Теги

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