在正则表达式模式中添加一个字符串

时间:2015-03-02 08:27:34

标签: perl awk sed

任何想法将子字符串(在这种情况下为;[^;]*)插入到在特定位置分隔的;的正则表达式模式中(在我的情况下添加第4个字段,其中有总是4个字段) 。 问题在于"字段"是正则表达式,并且char ;可以作为模式存在(比如在类或转义的char中)而不是分隔符。

它在AIX上,因此没有可用的GNU工具(posix sed或awk)。

可能的字符串和预期结果的样本

lazy;dog;are;running
-> lazy;dog;are;[^;]*;running

[^;]*;dog;are;[^;]*
-> [^;]*;dog;are;[^;]*;[^;]*

[^,;:0-9]*;dog;are;\;running
-> [^,;:0-9]*;dog;are;[^;]*;\;running

我尝试基于第一个字符串的sed 's/;[^;]*$/[^;]*;&/'但由于缺少后退参考值而无法在sed上为其他特殊情况构建修改 (我认为是perl或者是awk以避免重批/ sed

1 个答案:

答案 0 :(得分:0)

通过Perl。

$ perl -pe 's/(?<!\\);((?:\[[^\]]*\]|\\;|[^;])+)$/;[^;]*;\1/g' file
lazy;dog;are;[^;]*;running
[^;]*;dog;are;[^;]*;[^;]*
[^,;:0-9]*;dog;are;[^;]*;\;running

REGEX Demo