任何想法将子字符串(在这种情况下为;[^;]*
)插入到在特定位置分隔的;
的正则表达式模式中(在我的情况下添加第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
答案 0 :(得分:0)
通过Perl。
$ perl -pe 's/(?<!\\);((?:\[[^\]]*\]|\\;|[^;])+)$/;[^;]*;\1/g' file
lazy;dog;are;[^;]*;running
[^;]*;dog;are;[^;]*;[^;]*
[^,;:0-9]*;dog;are;[^;]*;\;running