Как убить все экземпляры запущенной программы, кроме самой новой

Ответ @rajish с использованием grep был закрыл, но кое-что пропустил: задан вопрос об удалении одинаковых строк . По умолчанию grep будет соответствовать строкам (частям строк).

POSIX grep имеет подходящий параметр:

-x
Учитывать только строки ввода, в которых используются все символы в строке, за исключением завершающей новой строки , чтобы соответствовать всей фиксированной строке или обычному выражение должно соответствовать строкам.

Учитывая это, для этого можно использовать grep :

cp -f -p input.txt input.txt~
grep -v -x -F -f input.pat input.txt~ >input.txt

где input.pat содержит строки, которые необходимо удалить, а input.txt файл, который нужно обновить.

Решение @nvarun с использованием sed имело аналогичную проблему, в дополнение к отсутствию экранирования символов / в файле шаблона. Этот пример работает для меня и ограничивает синтаксис POSIX sed :

cp -f -p input.txt input.txt~
sed -e 's/\([\/]\)/\\\1/g' -e 's/^/\/^/' -e 's/$/$\/d/' input.pat > input.sed
sed -f input.sed input.txt~ >input.txt

На всякий случай оба сохраняют исходный файл перед его обновлением ( POSIX cp ).

input.pat

first
this is second
second/third
second\third

input.txt

first
only first should match
this is not first
this is second
the previous line said this is second
first/second/third
second/third
first\second\third
second\third

Результат:

only first should match
this is not first
the previous line said this is second
first/second/third
first\second\third

0
19.02.2019, 18:35
1 ответ
while [ $(pgrep -c ssh) -gt 1 ]
do
  pkill --oldest -f ssh
done

Пока существует более одного sshпроцесса, убить самый старый ("наименее недавно запущенный" )один (s ). Наименее -недавно запущенный -может быть лучшей метрикой, чем «самый низкий PID», если ваше пространство PID зациклено или вы использовали рандомизированные PID.

3
28.01.2020, 02:22

Теги

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