Удалить строки, содержащие $, кроме строк с одним $ в конце

проверьте функцию set_load_weightв исходном коде ядра linux. Здесь вычисляется фактическая нагрузка объекта планирования (задачи/группы задач ). Эта подпрограмма вызывается из разных мест (, например, fork, или когда вы устанавливаете новое значение nice из пользовательского пространства и т. д. ).

if (update_load && p->sched_class == &fair_sched_class) {
    reweight_task(p, prio);
} else {
    load->weight = scale_load(sched_prio_to_weight[prio]);
    load->inv_weight = sched_prio_to_wmult[prio];
}

sched_prio_to_weightсодержит вес согласно приоритету.

Структура, которая сохраняет информацию о весе для задачи, такова struct load_weight. Эта структура используется cfs для загрузки объекта и обновления среды выполнения(vruntime)задачи в подпрограмме update_curr. cfs выбирает следующую задачу для запуска в pick_next_task. Ниже приведен фрагмент кода.

for_each_class(class) {
        p = class->pick_next_task(rq, prev, rf);
        if (p) {
            if (unlikely(p == RETRY_TASK))
                goto again;
            return p;
        }
    }

Здесь он просматривает каждый класс планирования и проверяет выполнение задачи.

-1
27.06.2020, 14:44
2 ответа

Метасимвол $в sedсопоставляется буквально двумя способами:

  • либо обратная косая черта \$, либо
  • заключить в квадратные скобки[$]

Но есть еще один способ, если $не является последним символом в регулярном выражении, тогда он рассматривается как литерал. Итак, следующее

sed -e '/$./d' file

создан специально для решения вашей проблемы.

3
18.03.2021, 23:23

Удалить строку, если она содержит $, за которой следует что-либо(.):

sed '/\$./d' file

Этот шаблон также работает сgrep:

grep -v '\$.' file
2
18.03.2021, 23:23

Теги

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