Содержимое файла Grep, ЗА ИСКЛЮЧЕНИЕМ совпадения с контекстом

IIRC, когда-то был патч только для RedHat, который делал это настраиваемым в ядрах RedHat.

Инго Молнар предложил нечто подобное в 2007 году, но его патч не был объединен.

Текущие ядра используют фиксированный однодневный интервал, введенный коммитом 11ff6f05f1e836a6a02369a4c4b64757e484adc1 в марте 2009 г.
Выдержка из fs/inode.c:

/*
 * With relative atime, only update atime if the previous atime is
 * earlier than either the ctime or mtime or if at least a day has
 * passed since the last atime update.
 */
static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
                             struct timespec now)
{

        if (!(mnt->mnt_flags & MNT_RELATIME))
                return 1;
        /*
         * Is mtime younger than atime? If yes, update atime:
         */
        if (timespec_compare(&inode->i_mtime, &inode->i_atime) >= 0)
                return 1;
        /*
         * Is ctime younger than atime? If yes, update atime:
         */
        if (timespec_compare(&inode->i_ctime, &inode->i_atime) >= 0)
                return 1;

        /*
         * Is the previous atime value older than a day? If yes,
         * update atime:
         */
        if ((long)(now.tv_sec - inode->i_atime.tv_sec) >= 24*60*60)
                return 1;
        /*
         * Good, we can skip the atime update:
         */
        return 0;
}

Я не совсем уверен, что это также зависит от используемой файловой системы. Согласно linux-4.2.4/Documentation/filesystems/ocfs2.txt, OCFS2 имеет atime_quantum...

1
06.04.2018, 16:00
2 ответа

Вместо использования grepвы можете использовать GNUsed:

sed -e '/particular exception/,+3d' test.txt

Это находит строки, соответствующие particular exception, и удаляет их и три строки после них.

4
27.01.2020, 23:18

Использованиеawk:

$ awk -v n=3 -v p='particular exception' 'match($0,p) { skip=n+1 } --skip < 0' test.txt
line random text 1
line random text 2
line random text 3
....
line random text 14
line random text 15
line random text 16
.....

Количество строк конечного контекста, которые необходимо пропустить, задается в командной строке, например,. -v n=3и регулярное выражение для соответствия также указывается в командной строке как -v p='expression'.

Переменная skipбудет уменьшаться на единицу для каждой прочитанной строки, и скрипт будет печатать текущую строку всякий раз, когда переменная skipменьше нуля. Когда интересующий шаблон найден, переменная skipполучает значение n + 1, что означает, что текущая строка и nдругие строки будут пропущены.

match($0,p)также может быть написано $0 ~ p.

0
27.01.2020, 23:18

Теги

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