根据条件插入行跳转,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的主要内容,如果未能解决你的问题,请参考以下文章