Добавить 100 к десятичным разрядам в нескольких файлах TXT

Предположение, что в памяти находится весь RAW-файл, неверно.Обычно, когда файл открывается, процесс получает дескриптор файла, который можно использовать для чтения / записи файла.

Когда файл открывается процессом, а затем удаляется, пока файл еще открыт, это не означает, что файл удаляется мгновенно. Файл фактически удаляется, когда больше нет процессов с дескрипторами (дескрипторами файлов) для этого файла. Вы можете использовать lsof , чтобы увидеть, есть ли у файла еще дескрипторы, и когда вы удаляете такой файл, он часто отображается с текстом (удален) , добавленным к строке.

Дисковое пространство также не освобождается при удалении открытого файла, поэтому можно безопасно использовать файл, пока он открыт. Когда удаленный файл больше не имеет активных файловых дескрипторов, файловая система освободит занимаемое дисковое пространство.

0
09.05.2018, 12:39
2 ответа

В системе GNU или FreeBSD вы можете попробовать что-то вроде:

grep  -rl --null '"moveLimit":[0-9]'. |
  xargs -r0 perl -pi -e 's/"moveLimit":\K\d+/$& + 100/ge'
  • greprэкурсивно lперечисляет файлы в текущем каталоге (.), содержащие "moveLimit":, за которыми следует десятичная цифра (null-, разделенная дляxargs -0)
  • xargs -r0передает этот список файлов вperl
  • perlредактирует файлы in -и заменяет последовательности цифр (\d+, которые следуют за "moveLimit":, на тот же номер($&)плюс 100.
1
28.01.2020, 02:15

Если бы вы сказали в самом начале, что ваши файлы txtна самом деле являются файлами JSON (, так как ваш образец просто выглядит как )-, это изменило бы все и предотвратило бы большинство вопросов/комментариев.

Используйте соответствующие инструменты JSON, такие как jq, так как это было бы правильно:

for f in *.txt; do
    if grep -q '"moveLimit":[0-9]*,' "$f"; then
        jq -c '.moveLimit |=. + 100' "$f" > tmp_f && mv tmp_f "$f"
    fi
done
5
28.01.2020, 02:15

Теги

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