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

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

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

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

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

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

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

2 ответа

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

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

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

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

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

Другие вопросы по тегам