Как искать определенную строку после совпадающей строки в файле с помощью sed, awk или grep

Кажется, мой синтаксис неверен.

nvidia -настройки -a '[gpu0]GPUPowerMizerMode=1'

должно быть

nvidia -настройки -a [gpu :0]/GPUPowerMizerMode=1

и т. д.

1
18.10.2019, 10:57
2 ответа

С помощьюawkсценариев:

$ awk '/Red Hat Satellite/{ f=1; next }f && /Pool ID:/{ print $NF; exit }' yourfile
abcdxyz12340987
1
27.01.2020, 23:22
sed -n '/Red Hat Satellite/,/Pool ID:/{ s/.*Pool ID:[[:blank:]]*\(.*\)/\1/p; }' file

Это применяет замену, которая выбирает вашу строку после Pool ID:. Он делает это в любой строке между строкой, содержащей строку Red Hat Satellite, и первой строкой после нее, содержащей Pool ID:. Команда будет печатать только результат любой успешной замены.

Следующая команда awkсделает то же самое при условии, что строка в конце строки Pool ID:не содержит пробелов:

awk '/Red Hat Satellite/,/Pool ID:/ { if (/Pool ID:/) print $NF }' file

grepне подходит для этой задачи, так как плохо обрабатывает контекст ("извлечь одну строку, если есть совпадение в другой строке" ). Это, возможно, сработает, учитывая некоторые PCRE поверх нулевых -завершающих строк с использованием GNU grep, но это будет хак.

2
27.01.2020, 23:22

Теги

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