【问题标题】:Insert line jump according to a condition, Bash Ubuntu根据条件插入行跳转,Bash Ubuntu
【发布时间】:2021-10-20 17:19:21
【问题描述】:

我在 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。

谢谢!

【问题讨论】:

  • 在您的示例输出中有字符串 Fm 的 3 个副本(我假设完整文件中有更多)...您如何确定要处理哪些 Fm 实例?您是否只想处理Fm第一次 次出现?您是否希望使用模式Fo,##Fm,### 处理所有出现的事件?别的东西?另外,您提到要在Fm 添加\n 之后,但您的sed 替换模式(\nFm)说要添加\n 之前 Fm ...你能更新一下这个问题吗?
  • 请用输入和所需输出编辑您的问题。输入实际上是双倍行距吗?你所说的“跳线”是什么意思?
  • 使用更具体的正则表达式,只匹配您要替换的情况。
  • @dawg 所需的输出是 markp-fuso 回答的。谢谢他,也谢谢你的推荐。跳线是指跳线,或\n。你们英国人指的是什么?

标签: bash text sed edit


【解决方案1】:

假设:

  • 想要在字符串Fm 之前插入\n 之前 如果...
  • 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多