【发布时间】:2020-01-20 03:15:02
【问题描述】:
如果基于某些逻辑,如果它们不存在,则寻找一种将三行添加到文件中的方法。
我找到了查找一些单行和多行模式所需的正则表达式,但不知道如何将它们联系在一起。
逻辑是这样的:
添加这三行...
** #MEA_DATA_END **;
MEA OK;TRUE
...如果...
\;(FALSE|TRUE)\;-?\d{0,3}\;-?\d{0,3}.?\d{0,3}\;\n
...后面没有...
$\n^\*\* #MEA_DATA_END \*\*\;
...或者当文件的最后一行是:
\;(FALSE|TRUE)\;-?\d{0,3}\;-?\d{0,3}.?\d{0,3}\;\z
不会更改的输入文件:
FALSE;FALSE;-1;25.0;FALSE;FALSE;-1;25.0;
** #MEA_DATA_END **;
MEA OK;TRUE
将要更改的输入文件:
FALSE;FALSE;-1;25.0;FALSE;FALSE;-1;25.0;
Some other text
输出:
FALSE;FALSE;-1;25.0;FALSE;FALSE;-1;25.0;
** #MEA_DATA_END **;
MEA OK;TRUE
Some other text
另一个将被更改的输入文件:
FALSE;FALSE;-1;25.0;FALSE;FALSE;-1;25.0;
输出:
FALSE;FALSE;-1;25.0;FALSE;FALSE;-1;25.0;
** #MEA_DATA_END **;
MEA OK;TRUE
我想使用 sed 或 awk 或类似工具创建一个脚本。有谁知道这个问题的解决方案吗?
【问题讨论】:
-
安装
perl没问题。 -
如果是这样,最简单的方法是将整个文件读入内存。使用
-n或-p时,-0777将导致整个文件被视为行。 -
@EdMorton:从
awkEd :) 中拿走什么!只是想说在perl中没有像-0选项这样的直接方法。 -
@Inian awk 相当于
-v RS='\0'对我来说似乎很简单,并且与您指定任何其他字符作为记录分隔符的方式一致,它不是 NUL 独有的。 -
@EdMorton:我删除了我的评论 Ed!再次没有反对
awk