Измените 0
в скрипте ed
на $
. $
обращается к последней строке буфера редактирования.
$ { printf 'g?%s?m$\n' 008 006 004 002; echo 'wq'; } | ed -s file.txt
$ cat file.txt
005
003
110
069
245
009
007
008
006
004
002
Если вы хотите, чтобы они располагались в порядке, обратном (порядку, указанному в вопросе ), вам пришлось бы перевернуть список шаблонов.
$ { printf 'g?%s?m$\n' 002 004 006 008; echo 'wq'; } | ed -s file.txt
$ cat file.txt
005
003
110
069
245
009
007
002
004
006
008
Или, если уж на то пошло,
{ printf 'g?%s?m$\n' 008 006 004 002 | tac; echo 'wq'; } | ed -s file.txt
... если у вас установлено tac
из GNU coreutils. В некоторых системах (BSD )вы можете использовать tail -r
вместо tac
.