【问题标题】:How to insert a string into a line in a file after a key word in bash如何在bash中的关键字之后将字符串插入文件中的一行
【发布时间】:2020-12-09 21:15:06
【问题描述】:

我有一个包含几行的文件。

Lines.txt

value1
value2
value3

我想将文件中的行追加到另一个文件中的关键字之后。

另一个文件.txt

NotTheKeyWord SomeOtherStuff SomeOtherStuff
NotTheKeyWord THEKEYWORD SomeOtherStuff SomeOtherStuff

我认为sed 有我需要的东西,但我在弄清楚如何将文本插入行中间时遇到问题。

我想要的结果是:

另一个文件.txt

NotTheKeyWord SomeOtherStuff SomeOtherStuff
NotTheKeyWord THEKEYWORD value1 value2 value3 SomeOtherStuff SomeOtherStuff

【问题讨论】:

  • 我不认为“文件内”替换会起作用。您必须将结果写入某个临时文件,然后将临时文件的内容写回“AnotherFile.txt”。使用sed 之类的sed -e s/THEKEYWORD/THEKEYWORD value1 value2 value3/ 应该可以工作;现在你必须考虑如何从文件“Lines.txt”的内容中创建这个命令行。就个人而言,如果我是你,我更喜欢用“真正的”编程语言编写一些程序。
  • 是的,我更喜欢使用我更熟悉的语言。在这种情况下我没有那个选项......而且我的 bash 知识已经生疏了。但我会试着像你说的那样从不同的角度来看待它。

标签: linux bash


【解决方案1】:

解决方案:

sed -r "s:(THEKEYWORD):\1 $(sed ':a;N;$!ba;s/\n/ /g' test.txt) :g" insert.txt

在哪里;

  • test.txt 是要插入的值,$(sed ':a;N;$!ba;s/\n/ /g' test.txt) 从文件中删除所有换行符,因此可以将其插入到同一
  • insert.txt THEKEYWORD 所在的文本文件

如果您想替换文件,请使用-i 选项;

sed -i -r "s:(THEKEYWORD):\1 $(gsed ':a;N;$!ba;s/\n/ /g' test.txt) :g" insert.txt

正如@KamilCuk 指出的那样,使用paste -sd ' ' test.txt 可用于删除换行符并插入文件;

sed -r "s:(THEKEYWORD):\1 $(paste -sd ' ' test.txt) :g" insert.txt

Terminal output + sed version

【讨论】:

  • gsed ':a;N;$!ba;s/\n/ /g' +1,但你可以paste -sd ' '
猜你喜欢
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2011-02-21
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多