grep для сопоставления с шаблоном, только если после него есть несколько буквенно-цифровых символов

В Bash вы можете извлечь первый символ, используя расширение параметра :

${parameter:offset:length}

Пример:

$ var=901.32.02
$ first_char="${var:0:1}"
$ echo "${first_char}"
9

0
15.09.2017, 08:58
2 ответа

Используйте класс символов [[:alnum:]]с одним или несколькими вхождениями.

grep 'Object Name:\|manual_encdomain:\|comments: [[:alnum:]]\+' in

Вы можете использовать [0-9A-Za-z], которому соответствует класс символов [[:alnum:]].

Или используйте реверс grep -v...с классом символов [[:space:]]:

grep -v 'comments:[[:space:]]*$' in

Также обратите внимание, что grepсам может читать из входного файла, не требуя дополнительного использования cat file |....

2
28.01.2020, 02:24

Предполагая, что вы имеете в виду , если среди символов, следующих за ним, есть хотя бы один буквенно-цифровой символ , это будет:

<file grep -E 'Object Name:|manual_encdomain:|comments:.*[[:alnum:]]'

Это comments:, за которым следует любое число(*)любого символа (.), за которым следует буквенно-цифровой символ (, или вы можете использовать [^[:space:]]вместо [[:alnum:]]для любого символа, кроме пробела ).

Обратите внимание, что \|не является стандартным/портативным. Чередование — это особенность стандартных расширенных регулярных выражений, которая grepпонимается с-E(стандартно ).

Вам понадобится cat, если вы хотите объединить несколько файлов. Оболочка может открыть file, чтобы сделать его прямым grepстандартным вводом (, а не каналом ), как указано выше, или вы даже можете передать имя файла в качестве аргумента grepдля grepдля открой и прочитай сам.

1
28.01.2020, 02:24

Теги

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