如何按照与执行代码相同的顺序将包含特定文本的行移动到文件顶部?

如何按照与执行代码相同的顺序将包含特定文本的行移动到文件顶部?

如何按照与执行代码相同的顺序将包含特定文本的行移动到文件顶部?

这是我的代码:

printf 'g?_001\|_002\|_003\|_004\|_005?m0\nwq\n' | ed -s target_file

(信用去钢铁起子帮助我走到这一步。确实是这个网站的一个了不起的用户! )

这会将它们移动到顶部,如下所示:

name_003
name_005
name_004
name_002
name_001

或者无论它们最初的顺序如何,都只到顶部。

printf但我需要将它们按照与and ed中的顺序相同的顺序放置code,因此在这种情况下,例如:

name_001
name_002
name_003
name_004
name_005

有人熟悉 和printfed

答案1

使用单独的移动命令:

ex -sc 'g?_005?m0' -c 'g?_004?m0' -c 'g?_003?m0' -c 'g?_002?m0' -c 'g?_001?m0' -c wq target_file

注意:

  • ex在这里使用(实际上是 Vim),而不是ed.您可以使用选项在命令行中指定 ex-commands -c,因此printf不需要。
  • 模式必须按相反顺序(005首先移动到顶部,然后004,向下推005,然后003,向下推004005,...)

printfed,也许:

(printf 'g?%s?m0\n' {005..001}; printf 'wq\n') |
  ed -s target_file

相关内容