使用 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
我正在尝试获取 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