Как добавить текст после последнего шаблона, используя ed - PullRequest
0 голосов
/ 08 июля 2019

Вот как я добавляю текст перед первым шаблоном, я хочу добавить после последним шаблоном

FILE_NAME="folder/myfile.c++"
STR_TO_ADD="string that i want to add"
PATTERN="banana"
ed $FILE_NAME 2>NULL 1>NULL<<EOF
/^$PATTERN
-1
a
$STR_TO_ADD
.
wq
EOF

файлом

banana
apple
banana
one
two
three

Ожидаемый результат

banana
apple
banana
string that i want to add
one
two
three

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Перейти к последней строке файла и найти шаблон в обратном направлении.

FILE_NAME="folder/myfile.c++"
STR_TO_ADD="string that i want to add"
PATTERN="banana"
ed $FILE_NAME 2>NULL 1>NULL<<EOF
$
?^$PATTERN
a
$STR_TO_ADD
.
wq
EOF

$ последняя строка файла.
?^$PATTERN поиск шаблона в обратном направлении от текущей строки.

0 голосов
/ 08 июля 2019

Решение user0 близко, но если последнее совпадение попадает в последнюю строку файла, оно найдет предыдущее.Вместо этого перейдите на первую строку и выполните поиск в обратном направлении:

1
?^$PATTERN
a
$STR_TO_ADD
.

I только что опубликовал это на моем @ed1conf аккаунте пару дней назад, так что это свежо вмой разум.

Кроме того, если вы пытаетесь добавить перед текстом (пример, который у вас уже есть), произойдет сбой, если первое совпадение будет в первой строке, потому что "-1 "идет до начала файла.Вместо этого используйте команду "i", чтобы вставить текст, а не добавлять его:

$
/^$PATTERN
i
$STR_TO_ADD
.

Возможно, вам также понадобится убедиться, что "$STR_TO_ADD" не содержит строк, содержащих один периодили расширение переменной преждевременно прекратит действие i (или a в ожидании).

...