如何从命令行将文件中的一行移动到顶部?

如何从命令行将文件中的一行移动到顶部?

我想将文件中的路径移动到文件顶部。每行列出 1 个路径。如何/someplace/2nd/仅使用命令行移动到顶部?

/someplace/1st/
/someplace/2nd/
/someplace/3rd/

所以我最终

/someplace/2st/
/someplace/1nd/
/someplace/3rd/

答案1

由于您使用了vim标签,我首先假设您指的是 Vim 的命令行。如果是这样,那么此命令将执行此操作。

:g/^\/someplace\/2nd\/$/m0

其中最后一个字符是零。参见

:help :g
:help :m

如果您指的是 shell 命令行,您可以使用vim此命令来编辑您的文件。

vim -c 'g/^\/someplace\/2nd\/$m0' -cwq yourfile

:help -c
:help :wq

答案2

以非交互方式编辑文件的传统方式是使用ed

(echo '/^\/someplace\/2nd\/$/m0'; echo w; echo q ) | ed $file

ed这将向文件上运行的文本编辑器发送 3 个命令$file

  • /regular_expression/m0:搜索匹配的行regular_expression并将其移动到位置 0
  • w:写入文件
  • q: 辞职

答案3

{
  sed -n '/^\/someplace\/2nd\//{p;q}' file
  sed    '/^\/someplace\/2nd\//d' file
} > temp && mv temp file

答案4

这可能对你有用(GNU sed):

sed -i '1,\|/someplace/2nd/|{1{h;d};//!{H;d};G}' file

相关内容