UltraEdit - 正则表达式替换

UltraEdit - 正则表达式替换

我尝试了许多不同的组合但没有成功,此时我将非常感谢您的帮助。

我需要多次替换该行的这一端(大约 300 次),而且一一替换会很痛苦:

:;XXXXXX (lenght may vary)

我能够找到它,:;*$其中突出显示了我所需要的!但我无法替换它,使其看起来像这样::;XXXXXX;;;

*- 应该匹配任何东西(确实如此)

$- 应该匹配行尾(确实如此)

我尝试过将其封装*在括号中(*); [*]......就像:;(*);;;$其他事情一样,但无济于事。当然会进行替换,但形式与输入相同。例如......而不是:;XXXXXX;;;我得到:;*;;;- 这是我能从中得到的最好的结果。

这是UltraEdit正则表达式格式,但是这个软件也可以处理Unix和Perl正则表达式。

我你可以建议任何方法来做到这一点,我会尝试一下(终端,其他软件等)。

编辑:

我正在尝试从旧诺基亚到新诺基亚(s30+ 系列)的联系人。只有 backup.nbu 我从中获得了 .vcf 联系人。我已通过 .txt 将它们放入一个文件中cat *.vcf > combined.vcf。我找到了 Excel 宏和 PHP 脚本,它们本应完成整个过程,但它们不起作用 - 但我想所有这些都不是那么相关。之后我发现了这个特定模型可以处理的 Vcard 格式。现在我正在尝试修改它,使其看起来相同。更换线条没问题,但我需要编辑末端。;:NAME;:NAME;;;修改名称...

我尝试了上面描述的方法。之后我尝试了建议sed -ri "s/\:\;X+$/&\;\;\;/g"

我确信 DOS 线路末端可能是问题所在,所以我运行:sed -i 's/\r//g' combined.vcf然后再次运行建议的 sid 命令。

从:N;CHARSET=UTF-8;ENCODING=8BIT:ALFA

到:N;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:;ALFA;;;

编辑2:

所以我从头开始...

  1. 我合并了 .vcf 文件

  2. 在 UltraEdit 中打开它们并保存为 LF (来自 CRLF) - 这次尝试没有sed终端

  3. 在查找替换中我选择了 Perl Regex

    • 寻找(:;)(.*)

    • 代替\1\2;;;

供参考:.*- 匹配零个或多个任何字符(换行符除外)...

完毕!

答案1

您需要的称为反向引用。它的意思是 ”将比赛中选择的任何内容放在这里” 并通过以下方式发挥作用:

  1. 在匹配的正则表达式中使用括号来选择字符串的一部分,
  2. 使用编号的反向引用(\1对于第一个括号,\2对于第二个括号,等等)。

sed支持这一点,这会产生以下命令(sed需要转义括号,但对于其他基于正则表达式的软件可能不是这种情况):

sed -i 's/^\(:;.*\)$/\1;;;/' combined.vcf

答案2

使用sed它可以像这样完成:

echo ":;XXXXXX" | sed -re "s/\:\;X+$/&\;\;\;/g"

当您从某个文件中获取数据时,您可以使用以下命令直接在文件内编辑它:

sed -ri "s/\:\;X+$/&\;\;\;/g" file.txt

相关内容