加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

仅返回Perl 5.8.8中的替换匹配(是:Perl“p”正则表达式修饰符等

发布时间:2020-12-15 23:28:20 所属栏目:大数据 来源:网络整理
导读:我有一个脚本( source)来解析svn信息,为Bash的$PS1创建一个合适的字符串.不幸的是,这不适用于我正在使用的运行Perl 5.8.8的系统 – 它输出所有行而不是仅输出匹配.什么是Perl 5.8.8相当于以下? __svn_ps1(){ local result=$( svn info 2/dev/null | perl
我有一个脚本( source)来解析svn信息,为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)/([^/]*)).*;24 ;p')
    if [ -n "$result" ]
    then
        printf "${1:- (%s)}" $result
    fi  
}

Perl 5.10的输出只包含空格,括号,分支名称,标记名称或主干之一以及末尾括号. Perl 5.8.8的输出(没有最终的p)包含了这个加上svn信息输出的每个空格分隔部分的括号版本.

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

解决方法

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

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

对于Perl v5.8和v5.10,我会以同样的方式做到这一点.我不确定你认为/ p修饰符的作用是什么,因为你不使用$`,$&或$’变量或它们的匹配等价物.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读