如何在 txt 文件中的列表的每个项目之前和之后添加固定文本?

如何在 txt 文件中的列表的每个项目之前和之后添加固定文本?

假设我有一个项目列表(每个项目占一行),例如:

apple
banana
grape
orange
...
...

我想在每个项目之前和之后放置一些固定文本;输出txt文件应如下所示:

SOMETEXT1
SOMETEXT2
apple
SOMETEXT3
SOMETEXT1
SOMETEXT2
banana
SOMETEXT3
SOMETEXT1
SOMETEXT2
grape
SOMETEXT3
SOMETEXT1
SOMETEXT2
orange
SOMETEXT3
...
...

SOMETEXT1SOMETEXT2并且SOMETEXT3是常数。

我该如何实现这一点?可以使用任何语言。该列表有近 10^7 个项目。

答案1

awk

awk '{printf "%s\n%s\n%s\n%s\n", "SOMETEXT1", "SOMETEXT2", $0, "SOMETEXT3"}' input-file

如果要替换当前文件,请使用-i inplace, 和 GNU awk

gawk -i inplace '{printf "%s\n%s\n%s\n%s\n", "SOMETEXT1", "SOMETEXT2", $0, "SOMETEXT3"}' input-file

只要SOMETEXT*没有引号,这就会起作用 - 在这种情况下,您必须转义这些引号。

答案2

使用sed

sed 's/^/SOMETEXT1\nSOMETEXT2\n/; s/$/\nSOMETEXT3/' input.txt

答案3

我注意到您的示例列表以 SOMETEXT3 开头,因此我在编写下面的示例时考虑到了这一点。

#!/bin/bash
sourceList=/path/to/source.list
newfile=/path/to/newfile

while read Line; do
  echo $SOMETEXT3 >> $newfile
  echo Line >> $newfile
  echo $SOMETEXT1 >> $newfile
  echo $SOMETEXT2 >> $newfile
done < $sourceList

答案4

你可以在 Ex 模式下使用 Vim:

ex -sc '%s/.*/SOMETEXT1\rSOMETEXT2\r&\rSOMETEXT3/|x' file
  1. %选择所有行

  2. s代替

  3. x保存并关闭

相关内容