Рейтинг:-1

Как отрезать часть строки?

флаг in

Мне нужно обрезать строку в определенный момент, я хочу отображать имя графического процессора, но только имя, ничего больше.

инкси-Gx | grep Устройство, показывающее:

Устройство-2: NVIDIA GK107GLM [Quadro K1100M] поставщик: драйвер Dell: nouveau

Я хочу, чтобы это показывало что-то вроде этого

NVIDIA GK107GLM [Квадро K1100M]

Как вырезать это, чтобы показать только имя? Есть ли способ напечатать диапазон, в данном случае от слова «Устройство» до слова «вендор».

Bodo avatar
флаг pt
Пожалуйста, отредактируйте свой вопрос и покажите пример вывода `inxi -Gx | grep Device` и ожидаемый результат [в формате кода] (https://stackoverflow.com/editing-help#code). Этот вопрос касается программирования оболочки/обработки текста и не имеет прямого отношения к Ubuntu, поэтому он может лучше подойти для https://stackoverflow.com/
pLumo avatar
флаг in
Не работает для меня
pLumo avatar
флаг in
Однако спасибо за ваше обновление, проверьте также: "*[...] и ожидаемый результат, [отформатированный как код](https://stackoverflow.com/editing-help#code).*"
Grzegorz Michalak avatar
флаг in
Он выдает: Графика: Встроенный графический процессор Intel 4th Gen Core Processor Device-1: i915
Рейтинг:2
флаг cn

Попробуйте сделать это следующим образом:

инкси-Gx | sed -n 's/.*Device-.*: \(.*\) поставщик.*/\1/p'
Grzegorz Michalak avatar
флаг in
Да это оно! Большое тебе спасибо. Можете ли вы описать, как это работает? Эта команда
Apomelitos avatar
флаг cn
Конечно. 1. Параметр -n подавляет автоматическую печать пространства шаблонов (без автоматического вывода из команды sed) 2. sed ищет этот шаблон `.*Device-.*: \(.*\) vendor.*` 3. `/\1/` - sed заменяет всю совпавшую строку на первую группу соответствия (часть шаблона в скобках `(.*\)`) 4. Параметр `/p` в конце печатает текущее пространство шаблонов (печатает совпадающие строки)
Рейтинг:0
флаг bd

Что-то вроде:

D=$(inxi -Gx | устройство grep)

if [[ $D =~ ^Device-2:([[:print:]]*)vendor:([[:print:]]*)driver:([[:print:]]*)$ ]]
тогда
  echo "Найдено устройство: ${BASH_REMATCH[1]}"
еще
  эхо "Устройство не найдено"
фи
Grzegorz Michalak avatar
флаг in
Это дает мне ошибку ``` синтаксическая ошибка: "(" неожиданно (ожидается "тогда") ```
Wayne Vosberg avatar
флаг bd
Какую версию Баша вы используете? (`баш --версия`)
Grzegorz Michalak avatar
флаг in
5.0.3. это должно работать на более новом bash?
Wayne Vosberg avatar
флаг bd
Он работает с 5.1.4(1). Оглядываясь назад на сопоставление регулярных выражений журнала изменений и BASE_REMATCH *могут* быть новыми с версии 5.1.
Grzegorz Michalak avatar
флаг in
Я не могу обновить bash, он говорит, что это самая новая версия:/
bac0n avatar
флаг cn
попробуйте добавить `#!/bin/bash`
Grzegorz Michalak avatar
флаг in
Это в первой строке скрипта
bac0n avatar
флаг cn
возможно, вы пропустили точку с запятой `]]; тогда`
Wayne Vosberg avatar
флаг bd
Я только что понял, что у меня есть RaspberryPI с bash 5.0.3(1). Там тоже работает. Вы уверены, что правильно ввели строку `if [[ ... ]]`? Если это так, попробуйте добавить `set -x` в начало скрипта - вывод может дать подсказку.
Рейтинг:0
флаг in

инкси-Gx | grep Устройство | вырезать -d ':' -f 2 | sed 's/ продавец//'

Этот резатьs вывод в поля с использованием «:» в качестве разделителя, затем он дает вам второе поле. Используйте sed then, чтобы удалить определенное слово с конца.

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

флаг in
Я думаю, что простое использование `-G` удалит часть строки поставщика?
Рейтинг:0
флаг cn
инкси-Gx | grep -oi сущ.*]
инкси-Gx | awk '/Устройство/{печать $2,$3,$4,$5}'

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.