gpt4 book ai didi

regex - 仅从 Perl 5.8.8 中的替换返回匹配项(原为 : Perl "p" regex modifier equivalent)

转载 作者:行者123 更新时间:2023-12-03 18:27:35 25 4
gpt4 key购买 nike

我有一个脚本( source )来解析 svn info为 Bash 的 $PS1 创建合适的字符串.不幸的是,这在我正在使用的运行 Perl 5.8.8 的系统上不起作用 - 它输出所有行而不仅仅是匹配项。 Perl 5.8.8 相当于以下什么?

__svn_ps1()
{
local result=$(
svn info 2>/dev/null | \
perl -pe 's;^URL: .*?/((trunk)|(branches|tags)/([^/]*)).*;\2\4 ;p')
if [ -n "$result" ]
then
printf "${1:- (%s)}" $result
fi
}

Perl 5.10 的输出只包含一个空格、括号、分支名称、标签名称或 trunk 之一。 , 和结束括号。 Perl 5.8.8 的输出(没有最后的 p )包含这个以及 svn info 的每个空格分隔部分的括号版本。输出。

一个可能的解决方法包括一个简单的 grep '^URL: ' svn之间和 perl命令,但我希望避免这种情况,因为这将针对每个 Bash 提示执行。

最佳答案

如果您只想从匹配的行中输出,请不要使用 -p命令行开关。它打印 $_ 的值在每个循环结束时。您可能想要一些带有 -n 的东西命令行开关:

 perl -ne 'print if s/.../.../'

对于 Perl v5.8 和 v5.10,我会以相同的方式进行。我不确定您的想法 /p修饰符正在执行,因为您不使用 $` , $& , 或 $'变量或其每个匹配项的等效项。

您可以在 perlrun 中阅读有关命令行开关的信息。 .

关于regex - 仅从 Perl 5.8.8 中的替换返回匹配项(原为 : Perl "p" regex modifier equivalent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4438120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com