Regex 替换每行上的前x个引用
在linux上使用perl,我试图解析来自FIFO的输入,截断每行的一部分,并替换剩余的一些字符——以便将其格式化为命令行实用程序,当FIFO中的所有挂起行都被修改时,将调用该实用程序 我的输入可以如下所示:Regex 替换每行上的前x个引用,regex,perl,replace,Regex,Perl,Replace,在linux上使用perl,我试图解析来自FIFO的输入,截断每行的一部分,并替换剩余的一些字符——以便将其格式化为命令行实用程序,当FIFO中的所有挂起行都被修改时,将调用该实用程序 我的输入可以如下所示: [1466621350] PROCESS_SERVICE_CHECK_RESULT;rs301;Disk IOPS;0;No disks exceeds defined IOPS thresholds | sda=1.40;100;200 sdb=0.00;200;400 sdc=0.00
[1466621350] PROCESS_SERVICE_CHECK_RESULT;rs301;Disk IOPS;0;No disks exceeds defined IOPS thresholds | sda=1.40;100;200 sdb=0.00;200;400 sdc=0.00;100;200 sdd=0.00;800;900 sde=0.00;800;900 sdf=0.40;200;3003
[1466621350] PROCESS_SERVICE_CHECK_RESULT;rs301a;Connectivity - Admin sessions;0;Connection OK |
[1466621350] PROCESS_SERVICE_CHECK_RESULT;rs301a;Uptime;0;Uptime ok - 253 days 07:53:49 |
[1466621350] PROCESS_SERVICE_CHECK_RESULT;rs301a;Volumes in pool;0;Number of volumes: 500 is OK | numvols=500
字符串的第一部分-直到第一个分号都应该删除-这将为我提供:
rs301;Disk IOPS;0;No disks exceeds defined IOPS thresholds | sda=1.40;100;200 sdb=0.00;200;400 sdc=0.00;100;200 sdd=0.00;800;900 sde=0.00;800;900 sdf=0.40;200;3003
rs301a;Connectivity - Admin sessions;0;Connection OK |
rs301a;Uptime;0;Uptime ok - 253 days 07:53:49 |
rs301a;Volumes in pool;0;Number of volumes: 500 is OK | numvols=500
因此,我需要用制表符替换前3个分号
我不是Perl正则表达式方面的专家,因此我不知道如何实现所需的输出
有人能帮我吗?我的脚本变量替换行应该是什么样子
我可以肯定,这是行不通的,因为它会替换所有分号:
$nsca_mystr=~s/\;/\t/g;
每行尝试以下操作:
$nsca_mystr =~ s/^(.+?);(.+?);(.+?);/$1\t$2\t$3\t/;
每行尝试以下操作:
$nsca_mystr =~ s/^(.+?);(.+?);(.+?);/$1\t$2\t$3\t/;
while(){
我的($line)=$\u=~/;(.*)/;\ fn捕获第一次之后的所有内容``
$line=~s/;/\t/代表1..3;#用``代替\t代表前3次出现的内容
打印“$line\n”;
}
while(){
我的($line)=$\u=~/;(.*)/;\ fn捕获第一次之后的所有内容``
$line=~s/;/\t/代表1..3;#用``代替\t代表前3次出现的内容
打印“$line\n”;
}
这就是我能想到的:
首先删除“[146621350]流程服务…”“
部分
然后移除前3个“;”
输出:
After regex : rs301 Disk IOPS 0 No disks exceeds defined IOPS thresholds | sda=1.40;100;200 sdb=0.00;200;400 sdc=0.00;100;200 sdd=0.00;800;900 sde=0.00;800;900 sdf=0.40;200;3003
这就是我能想到的:
首先删除“[146621350]流程服务…”“
部分
然后移除前3个“;”
输出:
After regex : rs301 Disk IOPS 0 No disks exceeds defined IOPS thresholds | sda=1.40;100;200 sdb=0.00;200;400 sdc=0.00;100;200 sdd=0.00;800;900 sde=0.00;800;900 sdf=0.40;200;3003
为了让意图更清楚,但这(理论上)会稍微慢一点,因为它捕获了4组而不是3组,并将第一组扔掉
为了让意图更清楚,但这(理论上)会稍微慢一点,因为它捕获了4组而不是3组,并将第一组扔掉
perl -p -e 's/^.+?;(.+?);(.+?);(.+?);/$1\t$2\t$3\t/;' < infile > outfile
perl -p -e 's/^(.+?);(.+?);(.+?);(.+?);/$2\t$3\t$4\t/;' < infile > outfile