Sed 仅当前面的命令匹配时才执行其余命令

Sed 仅当前面的命令匹配时才执行其余命令,sed,Sed,有没有办法告诉sed不对与前面命令不匹配的行运行其余命令 下面是一个例子: sed -rn '/^pT_yy +/{s/[^ ]+ +//;s/ +/,/g;p}' 我想匹配^pT_yy+并一次性替换它,而不需要重复匹配和替换的代码 我最初有 sed -rn 's/^pT_yy +//;s/ +/,/gp' 但这会打印不以^pT_yy+开头的行,就好像它们通过了sed-r的/+/,/“,我根本不想要这些行。请参见测试命令: t标签(测试)分支到标签仅在成功 自读取最后一个输入行或条件分支后的

有没有办法告诉sed不对与前面命令不匹配的行运行其余命令

下面是一个例子:

sed -rn '/^pT_yy +/{s/[^ ]+ +//;s/ +/,/g;p}'
我想匹配
^pT_yy+
并一次性替换它,而不需要重复匹配和替换的代码

我最初有

sed -rn 's/^pT_yy +//;s/ +/,/gp'
但这会打印不以
^pT_yy+
开头的行,就好像它们通过了
sed-r的/+/,/“
,我根本不想要这些行。

请参见测试命令:

t标签(测试)分支到标签仅在成功 自读取最后一个输入行或条件分支后的替换 被带走了。标签可以省略,在这种情况下,下一个循环是 开始

示例(如果第一个命令失败,则跳过第二个命令):

它进行第二次替换,因为第一次替换成功

如果恢复条件(如果第一次成功,则跳过第二次):


这里它跳过了第二个,因为第一个命令成功了。

编写了一个示例,您的代码片段不好看。但是您将编写
sed-rn的/^pT_yy+/;!Ts/+/,/gp'
这仍然会打印不以
pT_yy
开头的行。这对我很有用:
sed-r's/^pT_yy++/;tf;d、 :f s/+/,/gp'
。我不知道为什么第一个版本不起作用:)第二个版本也适用于我。谢谢不过有一个打字错误。最后的
p
会使所有内容打印两次,因为不再有
-n
。添加示例输入和预期输出将有助于更好地理解您的问题,并有助于在建议解决方案时进行测试。您可能正在寻找
sed 's/e/1/;!t;s/t/2/g' <<< "test string"
21s2 s2ring
sed 's/e/1/;t;s/t/2/g' <<< "test string"
t1st string