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

add a string in regex pattern

任何将子字符串(在本例中为 ;[^;]*)插入到在特定位置 ; 分隔的正则表达式模式的任何想法(在我的情况下添加第 4 个字段,其中总是 4场地)。 问题是 "field" 中的值是正则表达式,字符 ; 可以作为模式存在(如 class 或转义字符)而不是分隔符。

它在 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 可以避免沉重的 batch/sed

通过 Perl。

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

REGEX Demo