使用正则表达式替换顶行的部分

时间:2014-11-17 23:20:13

标签: regex bash perl

我想使用正则表达式替换文件中每一行文本部分的部分:

示例:

SSM_289|19wer12.stf_ALSO010100002_1 # 2567 # 2451 # 1 # OK=3_9;tremid=22;stretu_myce=DSA;tfs_ertsg=TDFFAR/TTGGAT;fsr_ssuat=23-16hg;te_donh=2.117
some texts...............
some texts...............
some texts...............

预期产出:

SSM_289| [19wer12.stf_ALSO010100002_1]
some texts...............
some texts...............
some texts...............

我的尝试无效:

perl -pi -e "s/^(\SSM_\d*\|)(\w*\.stf_[a-z][A-Z][0-9]*_\d*)\s\#\S*/$1 [$2]/g" file.txt

建议让代码正常工作。

谢谢

2 个答案:

答案 0 :(得分:2)

或使用此模式

\|([^# ]+).*

并替换为|[$1]
Demo

\|              # "|"
(               # Capturing Group (1)
  [^# ]         # Character not in [^# ]
  +             # (one or more)(greedy)
)               # End of Capturing Group (1)
.               # Any character except line break
*               # (zero or more)(greedy)

答案 1 :(得分:1)

假设第一个|#始终是您想要切断的地方

/(.*\|)(.*?)\s#.*$/$1 [$2]/

由于您没有指定语言,我将其保留为通用形式。

Example link