sed - sed:匹配第 N 个字符后删除字符
问题描述
我想简化我的数据库,删除不需要的信息,但找不到方法。这是我的文件示例,在第 6 列中,我想删除 BPSS 之前和之后的所有字符。BPSS 前后链接的号码必须保留。表格示例
bactNOG ENOG410884P 2 2 M 379066.GAU_3228,272560.BPSS2320
bactNOG ENOG4108K54 20 20 S 240016.VspiD_010100004855,530564.Psta_1282,349741.Amuc_1603,272560.BPSS1860,761193.Runsl_3432,320771.Cflav_PD6017
bactNOG ENOG4108PSW 33 31 E 1048834.TC41_0741,749927.AMED_4235,272560.BPSS0750,479433.Caci_2010,521098.Aaci_0763,220664.PFL_3212,208964.PA1485
bactNOG ENOG4108Q8E 10 9 G 272568.Gdia_0844,349163.Acry_2602,366394.Smed_0916,266834.SMc02021,266835.mll7376,457421.CBFG_05672,272560.BPSS2071
我想把表格简化成这个
bactNOG ENOG410884P 2 2 M 272560.BPSS2320
bactNOG ENOG4108K54 20 20 S 272560.BPSS1860
bactNOG ENOG4108PSW 33 31 E 272560.BPSS0750
bactNOG ENOG4108Q8E 10 9 G 272560.BPSS2071
我知道 sed 中的一些命令,但这些命令无法帮助我。我试过这样的 sed 命令
sed 's/BPSS[0-9][0-9][0-9][0-9].*/BPSS[0-9][0-9][0-9][0-9]/g' file
但是BPSS之后的数字发生了变化。我想保留(BPSS)号码。
提前致谢
卡迈勒
解决方案
$ sed 's/[^[:space:]]*,\([0-9]*\.BPSS[0-9]*\).*/\1/' file
bactNOG ENOG410884P 2 2 M 272560.BPSS2320
bactNOG ENOG4108K54 20 20 S 272560.BPSS1860
bactNOG ENOG4108PSW 33 31 E 272560.BPSS0750
bactNOG ENOG4108Q8E 10 9 G 272560.BPSS2071
推荐阅读
- git - 来自 gitlab 的新分支不会出现在 git bash 中
- python - 如何创建一个函数,向我显示分类列中具有 0 的行和唯一的数字列中的 ows?
- html - reCAPTCHA 是否可以在没有域名的 html 中工作?
- arrays - 使用 Swift 5.2 解码 JSON 会引发错误“预期解码数组
而是找到了一本字典。” - python - 稳定的 Softmax 函数返回错误的输出
- ocaml - 是否可以在 OCaml 中创建 solib
- c++ - zmq_send() 通过多个连接发送到哪里?
- python - Pygame打开窗口并立即崩溃
- javascript - 类型错误:arr.map 不是函数
- python - Django request.POST.get() 返回无