如何按照与执行代码相同的顺序将包含特定文本的行移动到文件顶部?
这是我的代码:
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
有人熟悉 和printf
吗ed
?
答案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
,向下推004
和005
,...)
与printf
和ed
,也许:
(printf 'g?%s?m0\n' {005..001}; printf 'wq\n') |
ed -s target_file