Asterisk не работает с grep

Вы можете использовать опцию --tries.

   --tries=number
       Set number of retries to number.  Specify 0 or inf for infinite
       retrying.  The default is to retry 20 times, with the exception of
       fatal errors like "connection refused" or "not found" (404), which
       are not retried.

Итак, --tries=0 должен выполнить трюк.

Это в сочетании с --read-timeout=seconds тоже. Секунды относятся к времени простоя: если в любой момент загрузки данные не принимаются более определенного количества секунд, чтение не выполняется, и загрузка перезапускается.

Итак, последняя команда: [ ! d4]

wget -c --tries=0 --read-timeout=20 [URL]

4
задан 19 September 2017 в 22:55

4 ответа

Не используйте для этого *. Используйте grep 'ki' trial_file.txt или grep -F 'ki' trial_file.txt.

Если вы не передадите ему опцию -x / --line-regex, grep вернет строки, содержащие совпадение где угодно, даже если вся строка не матч. Так что все, что вам нужно сделать, это совместить часть линии. Вам не нужно делать ничего особенного, чтобы указать, что может быть больше персонажей. В регулярном выражении * означает «ноль или более предыдущего элемента». Это совершенно отличается от его значения в расширении пути оболочки (см. Также эту статью, man 7 glob и этот раздел). Итак, например: ax*b соответствует a, за которым следует любое число x es (даже none), за которым следует b: ab, axb, axxb, axxxb. .. a[xz]*b соответствует a, за которым следует любое количество символов, каждое из которых является x или z, а затем b: ab, axb, azb, axxb, axzb, azxb, azzb, axxxb, ... a(xyz)*b соответствует a, после чего следует ноль или более вхождений строки xyz, а затем b: ab, axyzb , axyzxyzb, axyzxyzxyzb, ...

В этом случае кажется, что вы просто ищете текст. Вам не нужно использовать какие-либо метасимволы регулярного выражения, такие как ., * или \, которые имеют особые значения. Вот почему я предлагаю передать флаг -F, который делает поиск grep «фиксированными строками» вместо выполнения регулярного выражения.

Если, однако, вы хотите только совпадение, начиная с метасимволов строки, тогда вы хотите использовать метасимвол регулярного выражения: ^, как предполагает mjb2kmn. Это привязывает ваш матч к началу линии. В этом случае вы запустите grep '^ki' trial_file.txt.

Для получения дополнительной информации об опциях grep, см. [D21] mjb2kmn предлагает и руководство GNU Grep.

] Хотя в целом я предлагаю включить регулярные выражения в руководство GNU Grep , в этом случае нет якорей , потому что оболочка не выполняет никаких расширений на ki или ^ki перед передачей их в grep.

11
ответ дан 18 July 2018 в 06:37

Я думаю, что вы ожидаете диких карт shell-style здесь, но то, что вы получаете, является регулярным выражением. При поиске ki* вы запрашиваете литерал k, за которым следует 0 или более i s.

Первая строка не содержит «ki».

] Как правильно это сделать, зависит от того, что именно вы пытаетесь сопоставить.

Как уже отмечалось выше, grep "ki" может быть тем, что вы хотите, или если вы хотите совместить только строки, начинающиеся с «ki», вам понадобится grep "^ki". ^ обозначает начало строки.

10
ответ дан 18 July 2018 в 06:37

Не используйте для этого *. Используйте grep 'ki' trial_file.txt или grep -F 'ki' trial_file.txt.

Если вы не передадите ему опцию -x / --line-regex, grep вернет строки, содержащие совпадение где угодно, даже если вся строка не матч. Так что все, что вам нужно сделать, это совместить часть линии. Вам не нужно делать ничего особенного, чтобы указать, что может быть больше персонажей. В регулярном выражении * означает «ноль или более предыдущего элемента». Это совершенно отличается от его значения в расширении пути оболочки (см. Также эту статью, man 7 glob и этот раздел). Итак, например: ax*b соответствует a, за которым следует любое число x es (даже none), за которым следует b: ab, axb, axxb, axxxb. .. a[xz]*b соответствует a, за которым следует любое количество символов, каждое из которых является x или z, а затем b: ab, axb, azb, axxb, axzb, azxb, azzb, axxxb, ... a(xyz)*b соответствует a, после чего следует ноль или более вхождений строки xyz, а затем b: ab, axyzb , axyzxyzb, axyzxyzxyzb, ...

В этом случае кажется, что вы просто ищете текст. Вам не нужно использовать какие-либо метасимволы регулярного выражения, такие как ., * или \, которые имеют особые значения. Вот почему я предлагаю передать флаг -F, который делает поиск grep «фиксированными строками» вместо выполнения регулярного выражения.

Если, однако, вы хотите только совпадение, начиная с метасимволов строки, тогда вы хотите использовать метасимвол регулярного выражения: ^, как предполагает mjb2kmn. Это привязывает ваш матч к началу линии. В этом случае вы запустите grep '^ki' trial_file.txt.

Для получения дополнительной информации об опциях grep, см. [D21] mjb2kmn предлагает и руководство GNU Grep.

] Хотя в целом я предлагаю включить регулярные выражения в руководство GNU Grep , в этом случае нет якорей , потому что оболочка не выполняет никаких расширений на ki или ^ki перед передачей их в grep.

11
ответ дан 24 July 2018 в 18:38

Я думаю, что вы ожидаете диких карт shell-style здесь, но то, что вы получаете, является регулярным выражением. При поиске ki* вы запрашиваете литерал k, за которым следует 0 или более i s.

Первая строка не содержит «ki».

] Как правильно это сделать, зависит от того, что именно вы пытаетесь сопоставить.

Как уже отмечалось выше, grep "ki" может быть тем, что вы хотите, или если вы хотите совместить только строки, начинающиеся с «ki», вам понадобится grep "^ki". ^ обозначает начало строки.

10
ответ дан 24 July 2018 в 18:38
  • 1
    Это не регулярное выражение, когда вы используете grep без -E, но в этом случае он действительно ищет k s с 0 или более i s – Pilot6 18 September 2017 в 21:39
  • 2
    На самом деле это стандартные регулярные выражения по умолчанию, опции -E включают в себя расширенные регулярные выражения & quot; man grep объясняет это. Редактировать: извините, что страница linux grep man не объясняет это хорошо, однако страница руководства grep BSD. – mjb2kmn 18 September 2017 в 21:42
  • 3
    Ты прав. Я всегда называю только расширенным регулярным выражением реальные. Но это, вероятно, неправильно. – Pilot6 18 September 2017 в 21:43
  • 4
    @ Pilot6 Ubuntu имеет GNU Grep, который поддерживает три диалекта regex: pass -G или флаг для POSIX BRE с расширениями GNU, -E для POSIX ERE или -P для PCRE («Perl»). Он также принимает -F для "фиксированных строк" где образец сопоставляется буквально. См. [D0] Выбор выбора . Только -F делает не использование регулярного выражения. BRE и ERE более похожи друг на друга, чем на PCRE и многие другие диалекты; оба опускают мощные функции, которые в настоящее время распространены, например lookaround assertions . – Eliah Kagan 18 September 2017 в 22:37

Другие вопросы по тегам:

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