如何在同一行上以相同的模式替换多个字符串

时间:2017-07-12 19:30:47

标签: string sed replace

我的输入是:

  

blabla 0/1:0,1,0:1 1/1:0,0,1.000:2 0/0:1,0,0:0   1/0:0,0.943,0.057:1.057 blabla

我想要的输出是:

  

blabla RA AA RR RA blabla

每个条目/字符串由制表符分隔。并且所有条目/字符串都在同一行。 我仅以上面的四个条目为例,其中有数百个其他条目,我正在寻找相似的模式。也就是说,每个字符串都以0 / 1,1 / 0,1 / 0或1/1开头。

我想将以0/11/0开头的字符串替换为RA,以0/0开头的字符串替换为RR,以及字符串开头的字符串1/1AA

我现在使用的代码是

echo blabla  0/1:0,1,0:1 1/1:0,0,1.000:2    0/0:1,0,0:0 1/0:0,0.943,0.057:1.057 blabla | sed -e "s/0\/0/RR/g" -e "s/0\/1/RA/g" -e "s/1\/0/RA/g" -e "s/1\/1/AA/g"

然而,输出是

blabla RA:0,1,0:1 AA:0,0,1.000:2 RR:1,0,0:0 RA:0,0.943,0.057:1.057 blabla

我也尝试过以下代码

echo blabla  0/1:0,1,0:1 1/1:0,0,1.000:20/0:1,0,0:0 1/0:0,0.943,0.057:1.057 blabla | sed -e "s/0\/0:.*\\t/RR\\t/g" -e "s/0\/1:.*:\\t/RA\\t/g" -e "s/1\/0:.*\\t/RA\\t/g" -e "s/1\/1:.*\\t/AA\\t/g"

似乎根本不起作用。

1 个答案:

答案 0 :(得分:0)

您正在寻找的是:

Firefox

哪个收益率:

  

blabla RA AA RR RA blabla

<强>解释

让我们专注于一次替换:echo blabla 0/1:0,1,0:1 1/1:0,0,1.000:2 0/0:1,0,0:0 1/0:0,0.943,0.057:1.057 blabla | sed -E "s/0\/1[^ \t]+/RA/g; s/1\/0[^ \t]+/RA/g; s/0\/0[^ \t]+/RR/g; s/1\/1[^ \t]+/AA/g"

这会将s/0\/1[^ \t]+/RA/g替换为0\1anyth1ngexceptwhitespaces

对其他3种模式重复3次。

对于较新版本的RA,您可以将sed替换为"<space>\t"