Используйте grep для поиска слов, начинающихся с символов, отличных от слова.

Solución:

jq -r '.[]|select(.hostname | startswith("abcd"))' jjjj
0
19.06.2019, 23:44
3 ответа

Строка --является специальной для большинства утилит, когда она встречается в командной строке. Он сигнализирует об окончании опций синтаксическому анализатору аргументов командной строки. Он используется в ситуациях, когда вы можете захотеть передать имя файла, начинающееся с тире, например rm -- -f(, чтобы удалить файл с именем -fв текущем каталоге ).

Чтобы использовать --в качестве шаблона с grep, явно сообщите утилите, что это шаблон:

grep -e --

Опция -eдля grepпринимает аргумент опции, который представляет собой шаблон, по которому вы хотите, чтобы grepвыполнял поиск.

Вы также можете использовать

grep -- --

Здесь grepзнает, что второй --является шаблоном, потому что первый --говорит, что это не может быть вариантом.


Ваш последний конвейер возвращает ls -a, поскольку эта строка в файле не содержит r. Команда grep -verтакже может быть записана как grep -v -e r, т. е. «извлечь все строки, не соответствующие(-v)r(-e r)».

3
28.01.2020, 02:18

Чтобы ответить на вопрос в заголовке, который я интерпретирую как значение :, сообщите о словах с разделителями, -пробелами, которые не начинаются с буквенно-цифрового символа или символа подчеркивания (\wв некоторых механизмах регулярных выражений ), вы могли бы использовать GNU grepпри условии, что он построен с поддержкой PCRE:

grep -Po '(?<!\S)[^\w\s]\S*'

Это символ, отличный(^)от слова один(\w)или пробела один (\s), при условии, что ему не предшествует((?<!...))не -пробел (\S), а за ним не следует любое число(*)из не -пробелов(\S).

Что на ваш ввод возвращает:

-a
--verbose
1
28.01.2020, 02:18

Упрощенный ответ состоит в том, чтобы сначала «использовать» сигнал конца опций --, а затем задать шаблон для поиска :

.
grep -- --

как в:

$ echo $'ls -a\ncmake --verbose\nverbose' | grep -- --
cmake --verbose

Один из вариантов — сигнализировать, что строка --на самом деле является образцом с-e

$ echo $'ls -a\ncmake --verbose\nverbose' | grep -e --

И наименее элегантное решение — создать регулярное выражение, которое соответствует (только )--. Это регулярное выражение не может начинаться с --, поэтому мы должны использовать обходной путь либо:

grep '[-][-]'     or    grep '[-]\{2\}'     or    grep -E '[-]{2}'
0
28.01.2020, 02:18

Теги

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