Sed только печатают подобранное выражение

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

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

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

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

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

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

6
задан 19.03.2014, 16:45

2 ответа

  • Сделайте regexp немного более определенное.

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

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

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

9
ответ дан 07.12.2019, 15:43

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

2
ответ дан 07.12.2019, 15:43

Теги

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