在正则表达式模式中添加一个字符串
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
任何将子字符串(在本例中为 ;[^;]*
)插入到在特定位置 ;
分隔的正则表达式模式的任何想法(在我的情况下添加第 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