如何使用Perl脚本进行多重替换

问题描述 投票:0回答:1

我有很多脚本想要替换一些文本。

上下文:我们将硒用于UI自动化。我们曾经将对UiElement的引用存储在地图中。但是我们现在正在使用PageFactory(将所有UiElement声明为字符串的类)因此,当我们使用地图时,我们必须将UIelements称为objectMap.getIdentifier(“ navigate.leftsidebar”)。但是现在有了PageFactory(就像实例化一个对象,并且UIElements声明为字符串一样),我可以访问这些UIelements objectPageFactory.navigate_leftsidebar(这里navigation_leftsidebar是一个字符串)

因此,我将需要修改所有现有脚本。除了手动执行脚本之外,还有什么方法可以编写脚本来替换它?以下是我将遇到的3种情况:

  1. Click(getElement(objectMap.getIdentifier(“ navigate.leftsidebar”)。replace(“ $ Page”,“ Inbox”)),“单击元素”);
  2. objectMap.getIdentifier(“ navigate.leftsidebar”)
  3. Click(objectMap.getIdentifier(“ navigate.leftsidebar”),“单击元素”);

这是预期的输出:

  1. Click(((objectPageFactory.navigate_leftsidebar(“ Inbox”)),“单击元素”);

  2. objectPageFactory.navigate_leftsidebar

  3. Click(objectPageFactory.navigate_leftsidebar,“单击元素”);

更改是:

  1. “ objectMap”重命名为“ objectPageFactory”可能有不同类型的地图。如果为objectMap,则应将其替换为objectPageFactory;如果是loginMap,则应将其更改为loginPageFactory

  2. objectMap.getIdentifier(“ navigate.leftsidebar”)>>>> objectFactory.navigate_leftsidebar(括号内的String文字由下划线而不是点分隔

  3. 现在不需要getElement

  4. 我们曾经有一些动态的UiElement(在本例中为navigate.leftsidebar),我们曾经为此调用过String.replace,现在我们正在编写内部执行String.format的函数。getElement(objectMap.getIdentifier(“ navigate.leftsidebar”)。replace(“ $ Page”,“ Inbox”))>>>>> objectPageFactory.navigate_leftsidebar(“ Inbox”)

我从此链接获得了一个perl脚本,它将完成部分工作sed command to replace dots。我只需要添加不同的方案,有没有办法?输出现在也应该具有pageFactory文本,具体取决于哪个地图

#! /usr/bin/perl

use strict ;

sub fix { $_ = shift ; s/"//g ; s/\./_/g ; return $_  }

while ( <> ) {
    s/getElement\(objectMap\.getIdentifier\(("?[a-z.]+"?)\)/fix($1)/e ;
    s/objectMap\.getIdentifier\(("?[a-z.]+"?)\)/fix($1)/e ;
    print
}
perl substitution
1个回答
0
投票

这似乎提供了您要求的输出。我不了解您要更改的语言,因此可能在某些极端情况下处理错误。在更改文件之前进行备份!

#!/usr/bin/perl
use warnings;
use strict;

sub fix {
    my ($id) = @_;
    return $id =~ s/[.]/_/gr
}

while (<>) {
    s{getElement\((object|login)Map\.getIdentifier\("([^"]*)"\)\.replace\("\$Page", "([^"]*)"\)\)}
     {"$1PageFactory." . fix($2) . qq(("$3"))}ge;

    s{(object|login)Map\.getIdentifier\("([^"]*)"\)}
     {"$1PageFactory." . fix($2)}ge;

    print;
}
© www.soinside.com 2019 - 2024. All rights reserved.