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