Sed только печатать согласованное выражение

Как сделать sed только распечатать согласованное выражение?

Я хочу переписать строки типа «Батарея 0: зарядка, 44%, зарядка» на «Аккумулятор: 44%». Я попробовал следующее:

sed -n '/\([0-9]*%\)/c Battery: \1'

Это не работает.

Обычным «решением» является использование поиска, замены и соответствия всей строке: sed -n 's/.*\([0-9]*%\).*/Battery: \1/p' Теперь . * Слишком жадные, а \ 1 – только%.

Кроме того, я не хочу соответствовать больше, чем мне нужно.

  • Сделайте регулярное выражение немного более конкретным.

     sed -n 's/.* \([0-9]*%\),.*/Battery: \1/p' 
  • Выберите другой инструмент.

     perl -ne '/(\d+%)/ && print "Battery: $1\n";' 

    (Только для записи, foo && bar является сокращением для if (foo) { bar } .)

Возможно, вы могли бы использовать grep -o (значение -o важно) для требуемых значений и использовать их в вашем скрипте (?). Таким образом, вы могли бы использовать значение более творчески или, возможно, просто обернуты echo и т. Д.

  • Используйте sed, чтобы заменить все обратные косые черты косой чертой
  • sed -i +, что тот же вариант в SOLARIS
  • Замените поле на значения, указанные в другом файле
  • Ошибка RE: незаконная последовательность байтов в Mac OS X
  • Использование sed, Вставить строку ниже (или выше) шаблона?
  • Как вставить новую строку перед шаблоном?
  • Получение «sed error - незаконная последовательность байтов» (в bash)
  • Удалить строки в текстовом файле, который содержит определенную строку
  • Как удалить конечные пробелы с sed?
  • Удалить все строки, начинающиеся с # из файла
  • Удалить строку, если поле дублируется
  • Давайте будем гением компьютера.