解析文件并在每次出现后插入新行
Posted
技术标签:
【中文标题】解析文件并在每次出现后插入新行【英文标题】:Parse file and insert new line after each occurrence 【发布时间】:2020-06-21 08:13:38 【问题描述】:在 Unix 系统上,我尝试使用 sed
或 perl
在文件中添加新行,但我似乎遗漏了一些东西。
假设我的文件有多行文本,总是像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 并没有完全保持最新的声誉......以上是关于解析文件并在每次出现后插入新行的主要内容,如果未能解决你的问题,请参考以下文章