可以说我们有以下数据

 B346879 length: 12 B34 L677
 B111879 length: 32 B33 L677
 B545879 length: 34 B34 L677
 B344879 length: 98 B33 L677
 B090879 length: 45 B33 L677

我正在寻找“B34”,因此从本系列中我想打印第一行和第三行。
但是,如果我使用:
cat t.txt | sed -n '/B34/p' | awk '{print $1", "$4" "$5}' | sed 's/B//g'

因为'B34'与'B344879的前三个字符匹配,所以也会打印第四行。我知道,使用sed 's/pattern/replacement/n'这样的东西,您只能替换正则表达式的第n次出现。但是它如何与打印一起使用。我尝试了sed -n '/B34/2p'之类的东西,但这是无效的。

最佳答案

这可能对您有用(GNU sed):

sed -rn 's/^\s*(\S+)\s+(\S+\s+){2}(B34)\s+(\S+)/\1, \3 \4/;T;s/B//g;p' file

09-12 08:50