第n次出现正则表达式的sed打印行

前端之家收集整理的这篇文章主要介绍了第n次出现正则表达式的sed打印行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我们有以下数据

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

猜你在找的正则表达式相关文章