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

Posted

技术标签:

【中文标题】根据条件插入行跳转,Bash Ubuntu【英文标题】:Insert line jump according to a condition, 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。你们英国人指的是什么? 【参考方案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'

【讨论】:

以上是关于根据条件插入行跳转,Bash Ubuntu的主要内容,如果未能解决你的问题,请参考以下文章

vim 行跳转和列跳转的方法

命令行跳转到D盘

使用命令行跳转到指定文件或者文件夹

mysql根据条件将文本数据插入数据库

关于小程序页面跳转问题归纳(踩坑-)

websocket初探