возможно ли комбинировать grep -C или -A или -B с чем-то, что ИСКЛЮЧАЕТ совпадающую строку

Ну, это зависит от определения. В разных системах могут быть разные обычаи или разные названия одной и той же вещи.

Определение POSIX заключается в том, что процесс идентифицируется адресным пространством (памяти, видимой для процесса ), и что многие/большинство ресурсов ОС принадлежат процессу. (идентификатор процесса (очевидно ), идентификаторы пользователей, рабочий каталог, файловые дескрипторы...)

С другой стороны, поток определяется как «поток управления» внутри процесса, включая среду выполнения (регистры ЦП, состояние с плавающей запятой ), и например приоритет планирования.

Обычно :процесс ресурсы, поток планирование.


Но это не обязательно должно быть именно так. В Linux ресурсы, совместно используемые процессом и его дочерними процессами, могут быть установлены с помощью системного вызоваclone(2), так что, по крайней мере, представляется возможным иметь два процесса с общими файловыми дескрипторами, но с разными адресными пространствами. Или наоборот.

Кроме того, в прежние времена в Linux фактически не было надлежащего различия между процессами и потоками, были только процессы на уровне ядра. (Технически то, что мы обычно рассматриваем как поток, по-прежнему называется ядром «процессом», а процесс в обычном смысле называется «группой процессов».)


Некоторые потоки могут быть реализованы исключительно в пользовательском пространстве без поддержки со стороны операционной системы. В этом случае потоки не будут планироваться той же системой, что и процессы, поскольку планировщик ОС даже не будет знать об их существовании. Но даже в этом случае реализация пользовательского пространства должна иметь какой-то способ определить, какой поток запускать. (Реализации пользовательского -пространственного потока устарели в системах, которые реализуют правильные потоки, но это единственная ситуация, которую я могу придумать, которая даже близка к вашему третьему пункту.)

5
04.11.2019, 14:26
2 ответа

Вы можете добавить инверсию grepс помощью -vпосле первогоgrep:

$ grep -B1 --no-group-separator 'MARK' somefile | grep -v 'MARK'
interesting value
interesting value

Я добавил --no-group-separator, чтобы опустить разделительные строки между совпадениями.

10
27.01.2020, 20:32

Если вы не привязаны к использованию grep, то можете использовать другие инструменты, например awk.

awk '/MARK/ { print saved_line }
     { saved_line=$0 }'

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

8
27.01.2020, 20:32

Теги

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