Чтобы сделать это действительно простым, я должен использовать регулярное выражение для выбора строки в сложном файле. Я хотел бы «сохранить» в файле часть выбора регулярного выражения. Итак, я использую группы захвата и... я не знаю, как использовать результат.
Например: list.txt:
азбука 123 деф 456
Вот мое регулярное выражение с группой захвата:
(\d{3}) (\w{3})
Например, команда оболочки с grep (может быть что-то еще, мне все равно):
egrep '(\d{3}) (\w{3})' list.txt
Как сохранить или использовать все результаты \d{3} и \w{3}? я не могу просто использовать
egrep '\d{3}' > digit.txt
Потому что группа захвата — это всего лишь небольшая часть большого регулярного выражения.
Спасибо
egrep
вообще не является регулярным выражением оболочки -- grep является внешней командой, не являющейся частью оболочки, и оболочка не имеет доступа к ее состоянию. Собственный синтаксис регулярных выражений оболочки больше похож наre='([[:digit:]]{3} ([^[:space:]]+)'; [[ $str =~ $re ]]
, который сохранит ваши группы захвата в переменной оболочкиBASH_REMATCH
. (Обратите внимание, что синтаксис там базовый ERE --\d
и\w
являются расширениями, взятыми из PCRE; некоторые платформы предлагают их, другие нет, и небезопасно предполагать, что они будут доступны, поскольку какие функции доступны в регулярных выражениях нативной оболочки. зависит от локальной библиотеки C). - person Charles Duffy   schedule 14.09.2018