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
и т. д.