Самый быстрый способ замены нескольких выражений в файле размером 10 ГБ

cd "/home" && \
find . -depth -type d ! -name . ! -empty -exec sh -c '
   find "$1" -mtime +10 -type f -size +100M -delete
' {} {} \; -empty -delete

Резюме

Нам нужен GNU find для работы выше. Основная идея заключается в том, что мы вызываем find с режимом -depth , который заставляет find обрабатывать дочерние каталоги раньше, чем их родительские. Затем мы смотрим только на каталоги и только те, которые непусты, тем самым не позволяя find удалить изначально пустые каталоги.

1
17.04.2019, 12:37
2 ответа

Некоторые вещи, которые должны работать (не проверены)

Используйте более общее регулярное выражение

sed -i -e 's/(VSS):(F[0-9]+)/\1_\2/g' file.data

Используйте более одного выражения, но один sedвызов.

sed -i -e "s/VSS:F31128015/VSS_F31128015/g" -e "s/VSS:F31127969/VSS_F31127969/g" file.data
3
27.01.2020, 23:22

Perl хорош для простой замены текста, подобной этой. Следуя вашей ветке комментариев к ответу ctrl -alt -Делора, есть способы избежать жадности. В этом случае вы хотите сопоставить ровно 8 цифр? Если да,

perl -i.bak -pe 's/(?<=VSS):(?=F\d{8})/_/' bigfile

При этом используются обходы, чтобы найти двоеточие, которое вы хотите изменить на подчеркивание.

Люди часто добавляют флаг g, даже если в каждой строке есть только одно совпадение. Добавьте его, если необходимо.

0
27.01.2020, 23:22

Теги

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