PCRE - это, вероятно, лучший способ, и у вас уже есть два ответа, которые демонстрируют, как его использовать.
Однако существует более «элементарный» способ - использование только BRE (basi c регулярный выражения, используемые равниной grep
). Вам просто нужно вызвать его дважды.
Я предполагаю, что каждая строка ввода имеет (не более) одну подстроку, состоящую из одинарных кавычек, за которыми следует ноль или несколько символов, не являющихся одинарными кавычками, не подчеркивания, а затем подчеркиванием, и вы должны извлечь последовательность символов, не заключенных в одинарные кавычки, не подчеркивания в этой подстроке.
Если входные строки находятся в файле my_file
:
[mathguy@localhost ~/test]$ more my_file
$plugin->component = 'mod_jitsi';
$plugin->component = 'local_hvp';
$plugin->component = 'test_bot';
$plugin->component = 'mod_bot';
$plugin->component = 'mod_moodle';
[mathguy@localhost ~/test]$ grep -o "'[^'_]*_" my_file | grep -o "[^'_]*"
mod
local
test
mod
mod