Для каждой файловой системы существует драйвер, записанный с API, который может вызвать VFS Linux, когда это сталкивается с объектом, хранившим в файловой системе того типа. Это позволяет прозрачность через всю иерархию каталогов относительно файла Linux - и ориентированные на файловую систему системные вызовы (так же как возможный, например, никакие полномочия на VFAT, поэтому chown(2)
перестанет работать).
Для этой цели лучше использовать awk
, так как он поддерживает арифметические операции
cat $1 | awk -v d=$2 '/BookmarkPageNumber:/{$2-=d}1'
Другим выбором будет использовать сам оболочку (используя 5 в качестве примера, измените его на все, что фактическое целое число, которое вы хотите подкойте):
while read key val; do
[[ $key == "BookmarkPageNumber:" ]] && let val=val-5;
echo $key $val;
done < file
или, вы могли бы использовать инструмент, как Perl
:
perl -pe 's/(BookmarkPageNumber:\s*)(\d+)$/$1 . ($2-5)/e; ' file
И вот еще один awk
подход:
awk '$1~/BookmarkPageNumber:/{$2=$2-5}1;' file
awk '!/BookmarkPageNumber:/ {print}; /BookmarkPageNumber:/ {print $1 " " $2-1}' old.txt > new.txt
: Я просто понял, что он хотел уменьшить BookmarkPageNumber произвольным целым числом, которое я первоначально зачитывался, и мое решение только ниже работ для уменьшения его 1. Однако я чувствую трудно нажатое удаление, полностью рассматривая усилия, которые я приложил к нему:
--------частичное решение только---------
В случае, если вы одержимы, чтобы только использовать sed, у меня есть этот 1 лайнер для вас:
sed-r '/^BookmarkPageNumber: / {s / ([0-9] *) $/\1/;:loop {s/0 / 9/;/0 @/b цикл;}; s/1 / _ 0/; s/2 / _ 1/; s/3 / _ 2/; s/4 / _ 3/; s/5 / _ 4/; s/6 / _ 5/; s/7 / _ 6/; s/8 / _ 7/; s/9 / _ 8/; s/$ @9+ / ТЕРЯЮТ ЗНАЧИМОСТЬ/; s/_0*//; s/_//}' >metadata.txt за 1$
Примечание: это только работает на естественные десятичные числа, я надеюсь, что это хорошо для вас.
, О, это даже имеет обнаружение потери значимости. Таким образом в случае, если вы хотите, чтобы ваши номера страниц насыщали вниз к 0, просто заменили ПОТЕРЯ ЗНАЧИМОСТИ
0
, И я соглашаюсь с любым, кто называет это простым интеллектуальным wankery, потому что вот что это значит.
p.s.: Необходимо, вероятно, проверить, что входные и выходные дескрипторы файлов не указывают на тот же файл, или иначе файл станет усеченным, если у пользователя будет доступ для записи.