解析文件并在每次出现后插入新行

Posted

技术标签:

【中文标题】解析文件并在每次出现后插入新行【英文标题】:Parse file and insert new line after each occurrence 【发布时间】:2020-06-21 08:13:38 【问题描述】:

在 Unix 系统上,我尝试使用 sedperl 在文件中添加新行,但我似乎遗漏了一些东西。

假设我的文件有多行文本,总是像TNG:$1:F01 这样结束。

我正在尝试找到一种在$ 之后添加新行的方法,这样1 应该总是从新行开始。

我通过转义 $ 符号来尝试它:

perl -e '$/ = "\$"; while (<>) s/\$\$/\n/; print; ' 但它不起作用。

任何想法都会受到赞赏。

【问题讨论】:

【参考方案1】:

试一试:

sed 's/TNG:\$/&\n/' file > newfile

sed 默认使用 BRE,即s 是文字字符。但是我们必须避开$

kent$  cat f
TNG:$1:F01.

kent$  sed 's/TNG:\$/&\n/' f
TNG:$
1:F01.

【讨论】:

谢谢,但这只是在字符串中添加n,而不是新行。 -5:TNG:$n1: @Mihaimyh 你用的是哪个 sed?它在这里与 gnu sed 一起工作。 我在 AIX 7.2 上使用 sed @Mihaimyh 它不告诉您使用哪个 sed。请报告 sed 版本。还要检查你的 sed 的手册页,你可能需要一些像 -E 这样的选项。 这确实适用于 gnu sed,但在 AIX 上却不行。我将尝试提供sed 版本,但我找不到它。【参考方案2】:

使用 perl:

$ cat input.txt
line 1 TNG:$1:F01
line 2 TNG:$1:F01
$ perl -pe 's/TNG:\\\$\K/\n/' input.txt 
line 1 TNG:$
1:F01
line 2 TNG:$
1:F01

(阅读perlrun 中的-p-n 选项并使用它们,而不是尝试自己做他们在单行中所做的事情)

【讨论】:

@Mihaimyh 不错。我不完全确定你是否有足够新的 perl 来使用 \K 构造。它是很久以前添加的(perl 5.10),但商业 unix 并没有完全保持最新的声誉......

以上是关于解析文件并在每次出现后插入新行的主要内容,如果未能解决你的问题,请参考以下文章

C ++在文本文件中的特定字符后插入新行

需要 '/n' 但被解析为新行 - Azure Synapse Analytics

观看/阅读不断增长的日志文件

在文件开头插入新行[重复]

插入新行表1复制到表2选定字段后mysql触发器没有重复

如何在解析后获取xml文件的元素并在iPhone程序中对其进行验证