使用 grep/sed/etc 提取括号中的字符串?

Extract string in brackets using grep/sed/etc?

我正在尝试获取 PHP-FPM 的文件位置,使用以下管道命令有效:

ps aux | grep php-fpm  | grep master

结果:

root        80  0.0  0.6 334912 26072 ?        Ss   14:18   0:00 php-fpm: master process (/root/.symfony/php/2b1b88a9c9ed1cd796c66569d386096e96bbe2bc/fpm-7.3.33.ini)

但是我仍然需要提取括号之间的文件路径,不太明白,输入的字符串抱怨非法标记..

RESULT_FROM_ABOVE | grep -o '^[\(^.\)]*'

bash: syntax error near unexpected token `('

这行不通,但应该给出我正在努力实现的想法的要点。

我需要在我尝试应用的最终 grep 之前转义 RESULT_FROM_ABOVE,但我找不到任何解决方案。

想法?

设置几个变量来模拟 ps/grep/grep (pgg_out) 和 ps (ps_out) 输出:

$ pgg_out='root 80 0.0 0.6 334912 26072 ? Ss 14:18 0:00 php-fpm: master process (/root/.symfony/php/2b1b88a9c9ed1cd796c66569d386096e96bbe2bc/fpm-7.3.33.ini)'
$ ps_out='
some stuff to ignore
root 80 0.0 0.6 334912 26072 ? Ss 14:18 0:00 php-fpm: master process (/root/.symfony/php/2b1b88a9c9ed1cd796c66569d386096e96bbe2bc/fpm-7.3.33.ini)
more stuff to ignore'

将当前 ps/grep/grep 输出通过管道传输到 sed:

$ echo "${pgg_out}" | sed -En 's/.*\((.*)\)//p'
/root/.symfony/php/2b1b88a9c9ed1cd796c66569d386096e96bbe2bc/fpm-7.3.33.ini

消除 OP 当前的 grep 调用并将 ps 输出通过管道传输到 awk:

$ echo "${ps_out}" | awk -F'[()]' '/master/ && /php-fpm/ {print }'
/root/.symfony/php/2b1b88a9c9ed1cd796c66569d386096e96bbe2bc/fpm-7.3.33.ini

使用grep

$ grep -o '/[[:punct:][:alnum:]]*[^)]' file
/root/.symfony/php/2b1b88a9c9ed1cd796c66569d386096e96bbe2bc/fpm-7.3.33.ini