2015-03-02 73 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

相關問題