根据条件插入行跳转,Bash Ubuntu

Insert line jump according to a condition, Bash Ubuntu

我要在 ubuntu 的 bash 中编辑以下文本:

Fo, 68

Fo, 55**Fm**,   328

Fv, 273

Fv/Fm,  0.832

PAR,
    
TEMP,

Fs, 65

Fm',    91

èPS2,   0.286,

正文继续,但以上是根本统一。

我想在第一个Fm之前插入一个换行符(在第二行,不是说只有在第二个),所以我尝试了:

sed -e 's/Fm/\nFm/g'

但是这个命令也在Fv/Fm的栏/之后插入一个跳转行。我想避免这种情况,因为我有兴趣保留 Fv/Fm。换句话说,我需要以这种形式保存 Fv/Fm。

谢谢!

假设:

  • 想插入一个\n before字符串Fm if ...
  • Fm 前面的字符是一个数字 ([0-9])
  • 整个文件中可能要执行多个替换(即,不要将替换限制在第一次出现的位置)

样本输入(添加最后 3 行以证明假设):

$ cat x
Fo, 68
Fo, 55Fm,   328                # insert '\n' before this 'Fm'
Fv, 273
Fv/Fm,  0.832                  # leave this 'Fm' alone
PAR,
TEMP,
Fs, 65
Fm',    91                     # leave this 'Fm' alone
èPS2,   0.286,
Fo, 33Fm,   328                # insert '\n' before this 'Fm'
Fo, 9XFm,   328                # leave this 'Fm' alone
Fo, 97Fm,   328                # insert '\n' before this 'Fm'

一个sed想法:

$ sed  '/[0-9]Fm/ s/Fm/\nFm/' x
Fo, 68
Fo, 55
Fm,   328                      # '\n' inserted before this 'Fm'
Fv, 273
Fv/Fm,  0.832                  # leave this 'Fm' alone
PAR,
TEMP,
Fs, 65
Fm',    91                     # leave this 'Fm' alone
èPS2,   0.286,
Fo, 33
Fm,   328                      # '\n' inserted before this 'Fm'
Fo, 9XFm,   328                # leave this 'Fm' alone
Fo, 97
Fm,   328                      # '\n' inserted before this 'Fm'