Сокращение числа с sed

Для каждой файловой системы существует драйвер, записанный с API, который может вызвать VFS Linux, когда это сталкивается с объектом, хранившим в файловой системе того типа. Это позволяет прозрачность через всю иерархию каталогов относительно файла Linux - и ориентированные на файловую систему системные вызовы (так же как возможный, например, никакие полномочия на VFAT, поэтому chown(2) перестанет работать).

3
26.11.2018, 00:57
4 ответа

Для этой цели лучше использовать awk , так как он поддерживает арифметические операции

cat $1 | awk -v d=$2 '/BookmarkPageNumber:/{$2-=d}1'
9
27.01.2020, 21:07

Другим выбором будет использовать сам оболочку (используя 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 
4
27.01.2020, 21:07
awk '!/BookmarkPageNumber:/ {print}; /BookmarkPageNumber:/ {print $1 " " $2-1}' old.txt > new.txt
5
27.01.2020, 21:07

: Я просто понял, что он хотел уменьшить 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.: Необходимо, вероятно, проверить, что входные и выходные дескрипторы файлов не указывают на тот же файл, или иначе файл станет усеченным, если у пользователя будет доступ для записи.

3
27.01.2020, 21:07

Теги

Похожие вопросы