查找字符串,然后从列表中替换它们

时间:2017-08-31 09:58:43

标签: regex

好吧,我有这个问题,有太多的行和太多不同的文件可以逐个编辑,我需要想出办法来做到这一点。 Regexp可能有用,但我不知道为什么。

我有一个这样的清单:

    <a class="jTip">First</a>
    <a class="jTip">Second</a>
    <a class="jTip">Third</a>
    <a class="jTip">Fourth</a>

这是一个很长的名单(大约6000行)。还有大约50个文件包含这样的行:

<a class="jTip">Second</a>, <a class="jTip">Fifth</a>

所以我想要做的是找到一种方法从列表中获取<a class="jTip">First</a>行,在这些文件中搜索它,并将其替换为<a class="jTip" name="something">First</a>

我的问题是,有没有办法让regexp从列表中获取行,然后在其他文件中查找并替换这些行(使用notepad ++,但我愿意接受建议)。

编辑:我认为我没有正确表达我的问题。我有很长的字符串列表,大约6000行。我有大约30个其他文件,包括不同组合的这些行。我需要一种方法来做到这一点:

从列表文件中获取第一行,在其他文件中找到它,将其替换为该行的修改版本。 然后从列表文件中获取第二行,在其他文件中找到它,将其替换为该行的修改版本。 然后从列表文件中获取第三行,在其他文件中找到它,用修改后的版本替换它们。

我必须这样做6000次(每行不同!)。我不能这样做:

找到<a class="jTip">First</a>替换<a class="jTip" name="something">First</a>,因为something会发生变化(我可以手动执行,不会经常更改)。因此,对于第一个源/列表文件,它将是something,然后我将为第二个列表运行相同的文件,它将是anything。我不能批量替换(我知道如何替换所有)<a class="jTip"><a class="jTip" name="something">

可悲的是,我正在处理一个文件的混乱,所以我甚至认为有一种方法可以用正则表达式做到这一点。我以为我会试一试。

另外,抱歉错误的标签,我修好了。

最后,有没有办法“从文件中获取每个(任何字符)并将其替换为其他文件中的(相同字符)”正则表达式中的东西?

4 个答案:

答案 0 :(得分:1)

如果您在Linux系统上运行,那么一个解决方案也可以使用cli programm sed

sed -i  -e 's/<a class="jTip">First</a>/<a class="jTip" name="something">First</a>/g' {pathToFolder}/*

注意:不要忘记将{pathToFolder}替换为您的实际路径

答案 1 :(得分:0)

您可以使用JQuery并实现您想要的目标:

$(document).ready(function(){
  $('.jTip').each(function(){
     if($(this).text() === 'First' || 
     $(this).text() === 'Second' ||
     $(this).text() === 'Third'){
       $(this).attr('name','something');
       $(this).text('First');
     }
  });
})
a[name='something']{
  color:red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="jTip">First</a><br/>
<a class="jTip">Second</a><br/>
<a class="jTip">Third</a><br/>
<a class="jTip">Fourth</a><br/>
<a class="jTip">Fifth</a><br/>
<a class="jTip">First</a><br/>
<a class="jTip">Second</a><br/>
<a class="jTip">Third</a><br/>
<a class="jTip">Fourth</a><br/>
<a class="jTip">Fifth</a>

为了说明名称something已添加到元素中,我使用了颜色css。

答案 2 :(得分:0)

打开文件 按 ctrl + f ctrl + h (或转到查找和替换选项)输入类=&#34; jTip&#34;&gt; 在查找框中,并将其替换为 class =&#34; jTip&#34; name =&#34;某事&#34;&gt;

没有比这更简单的答案了。

答案 3 :(得分:0)

您可以使用msr.exe / msr.gcc48仅使用1个命令行来执行此操作:extract - &gt;搜索 - &gt;替换在我打开的项目中的tools目录https://github.com/qualiu/msr

假设您的列表文件为source-list.txt

假设要替换的重复目录/文件是paths-to-find,如:dir1,dir2,file1,file2

从列表中提取,预览3行:

msr -p source-list.txt -it ".*<a class=\"jTip\">(\w+).*" -H 3

paths-to-find中递归搜索和替换:

  • Windows :(如果您希望将其保存在%%a / %a等文件中,请使用my.bat代替my.cmd

    for /f "tokens=*" %a in ('msr -p source-list.txt -it ".*<a class=\"jTip\">(\w+).*" -o "$1" -PAC') do msr -rp paths-to-find -it "(<a class=\"jTip\" name=\"something\">)\w+" -o "${1}%a" -R

  • Linux的:

    for a in $(msr -p source-list.txt -it ".*<a class=\"jTip\">(\w+).*" -o '$1' -PAC); do msr -rp paths-to-find -it "(<a class=\"jTip\" name=\"something\">)\w+" -o '${1}'$a'' -R; done

    for a in $(msr -p source-list.txt -it '.*<a class="jTip">(\w+).*' -o '$1' -PAC); do msr -rp paths-to-find -it '(<a class="jTip" name="something">)\w+' -o '${1}'$a'' -R; done