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

String 如何替换同一行上以相同模式开头的多个字符串,string,sed,replace,String,Sed,Replace,我的意见是: 布拉布拉0/1:0,1,0:11/1:0,0,1.000:20/0:1,0,0:0 1/0:0,0.943,0.057:1.057布拉布拉 我想要的输出是: 呼啦啦呼啦呼啦呼啦呼啦呼啦 每个条目/字符串由制表符分隔。并且所有条目/字符串都在同一行上。 我只展示了上面的四个条目作为一个例子,有数百个其他条目具有类似的模式,我正在寻找。也就是说,每个字符串都以0/1、1/0、1/0或1/1开头 我想将以0/1或1/0开头的字符串替换为RA,以0/0开头的字符串替换为RR,以1/1开头的

我的意见是:

布拉布拉0/1:0,1,0:11/1:0,0,1.000:20/0:1,0,0:0 1/0:0,0.943,0.057:1.057布拉布拉

我想要的输出是:

呼啦啦呼啦呼啦呼啦呼啦呼啦

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

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

我现在使用的代码是

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"

它似乎根本不起作用。

您需要的是:

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

这将用
RA
替换
0\1anyth1ngeptwhitespaces

对其他3种图案重复3次


对于较新版本的
sed
,您可以将
“\t”
替换为
“\s”

噢,您忘记发布代码了。StackOverflow是关于帮助人们修复代码的。这不是免费的编码服务。有代码总比没有代码好。在这里发布更多Qs之前,请阅读、、和。祝你好运。你说你想用
RA
替换
0/1
1/0
,但似乎你已经用
RA
替换了
0/1:0,1,0:1
。您的意思是希望将任何以
0/1
1/0
开头的非空白字符组成的字符串替换为
RA
,还是只对匹配
0/1[:01,]*
1/0[:01,]*
的字符串感兴趣?如果
blabla
0/1text:0:1
,该怎么办?您将如何处理
2/1:0,1
?这个问题没有明确说明。我在那里包括了我的代码,很抱歉误解了。我希望由任何以0/1或1/0开头的非空白字符组成的任何字符串都被替换为RA,以0/0开头的字符串被替换为RR,以1/1开头的字符串被替换为AA。所有字符串都以0/1、1/0、0/0或1/1开头。@williampersell谢谢!如果每个条目/字符串之间用空格分隔,则此操作有效。但是,当每个条目/字符串都由制表符分隔时,它似乎不起作用。我得到的输出是bla-RA,如果它们用tab分隔@真管用!因为我使用macOS Sierra运行代码,所以我将“\t”替换为“${printf'\t'}”。感谢you@Jedi.@在您的情况下,我会尝试
[^[:space:]
而不是
[^\t]