加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:50:38 所属栏目:百科 来源:网络整理
导读:假设我们有以下数据 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.tx
假设我们有以下数据

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读