2015-03-02 258 views
1

任何想法插入一个子字符串(;[^;]*在这种情况下)成为;分离在一个特定的地方(在我的情况下,总是有4字段添加第四个字段)的正则表达式模式。 问题是,“字段”中的值是正则表达式,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的

+0

所以你不想计算出现在'[]'里面的分号? – 2015-03-02 08:38:31

+0

对,也不是';'在'\;'中出于同样的原因 – NeronLeVelu 2015-03-02 08:52:29

回答

0

通过的Perl。

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

REGEX Demo

+1

看起来很完美:-) perl可以使用反向引用。 Thk – NeronLeVelu 2015-03-02 10:17:20

+0

发布downvote的原因。 – 2015-03-03 01:25:41

相关问题