有没有办法告诉sed
不能运行与前面命令不匹配的行的剩余命令?
以下是一个例子:
sed -rn '/^pT_yy +/{s/[^ ]+ +//;s/ +/,/g;p}'
我希望匹配^pT_yy +
并一次性替换它,而无需重复代码进行匹配和替换。
我最初有
sed -rn 's/^pT_yy +//;s/ +/,/gp'
但是这会打印出不会以^pT_yy +
开头的行,就像它们通过sed -r 's/ +/,/'
一样,而我根本不想要那些行。
答案 0 :(得分:1)
请参阅测试命令:
t label(test)仅在成功时才转移到标签 自上次输入行读取或条件分支以来的替换 被拿走。标签可以省略,在这种情况下下一个循环是 启动。
示例(如果第一个命令失败则跳过第二个):
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
这里跳过了第二个,因为第一个命令成功了。