搜索以词组开头并与下一行交换的行?

时间:2017-08-24 17:11:47

标签: shell text gnu data-manipulation

假设我有这样的文件:

Stuff here
TERM here
Other stuff
Stuff here
TERM HERE
Additional stuff
End of stuff

是否有Linux命令行工具可以找到以TERM开头的所有行,并将整行与下一行交换,以便生成:

Stuff here
Other stuff
TERM here
Stuff here
Additional stuff
TERM HERE
End of stuff

非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用此命令以非交互式方式将Vim用作vim -e或仅用ex

ex filename -u NONE -c 'g/^TERM/del | put' -c 'wq'

说明:

  • ex filename:非交互式修改filename
  • -u NONE:不要加载vimrc文件。
  • -c:加载文件后运行以下命令
  • g:global命令。它搜索模式,然后在找到它的每个地方执行命令。
  • /^TERM/:要搜索的模式。 ^是一个与行首相匹配的特殊字符。 /用于分隔模式。
  • del:删除当前行。
  • |:分隔命令。在这种情况下,delput。两者仍然是g命令的一部分。
  • put:粘贴当前行后面的已删除行。
  • wq:将文件写入磁盘并退出。这必须作为单独的-c参数放置,而不是像|那样用put分隔,因为否则只会在执行第一个匹配行后退出。