У меня есть файл журнала с именем: log.txt
моя цель - добавить параметр: $ PARAM только после последней строки: «Число» в файле log.txt
пример:
PARAM=34.43435454
хвост -10 log.txt
date 12.3.2010 Number 2.34
date 12.3.2010 Number 2.14
date 12.3.2010 Number 34.43435454
кто-нибудь знает, как это сделать с помощью sed?
После «числа» в каждой строке:
sed "s/.*Number/& $PARAM/" log.txt
После «числа» в последней строке:
sed "\$s/.*Number/& $PARAM/" log.txt
После «Цифры» последний раз он появляется в файле:
sed "/Number/!b;:a;\$!N;/\n.*Number/{h;s/\n[^\n]*\$//p;g;s/^.*\n//};\$!ba;s/^\(.*Number \)/\1$PARAM/" log.txt
Пояснение к последней версии:
/Number/!b
- если в строке нет «Число», перейти в конец скрипта и вывести строку:a
- метка петли "а" \$!N
- если это не последняя строка файла, добавить следующую строку в конец содержимого пространства шаблонов/\n.*Number/{
- если пространство шаблона включает "Число" после новой строки, тогда h
- копировать пространство шаблона, чтобы удерживать пространствоs/\n[^\n]*\$//p
- удалить часть после новой строки и распечатать остатокg
- скопировать удерживаемое пространство в пространство шаблонаs/^.*\n//}
- удалить часть перед новой строкой, закончить, если\$!ba
- ответвление с меткой "а"s/^\(.*Number \)/\1$PARAM/
- добавить содержимое переменной после «Число»