假设我们有以下数据
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’所以从这个系列我想要打印第1和第3行.
但如果我愿意的话:
cat t.txt | sed -n '/B34/p' | awk '{print $1","$4" "$5}' | sed 's/B//g'
第4行也将被打印,因为’B34’匹配’B344879的前3个字符.我知道像sed的’/ 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