如何让 sed 只打印匹配的表达式?
我想将字符串“电池 0:充电中,44%,正在充电”重写为“电池:44%”。我尝试了以下方法:
sed -n '/\([0-9]*%\)/c Battery: \1'
这不管用。
常见的“解决方案”是使用搜索和替换并匹配整行:
sed -n 's/.*\([0-9]*%\).*/Battery: \1/p'
现在 .* 太贪婪而 \1 只是 %。
此外,我不想匹配超出我需要的内容。
答案1
使正则表达式更加具体一些。
sed -n 's/.* \([0-9]*%\),.*/Battery: \1/p'
选择不同的工具。
perl -ne '/(\d+%)/ && print "Battery: $1\n";'
(仅供记录,
foo && bar
是 的简写if (foo) { bar }
。)
答案2
也许您可以grep -o
(-o 很重要)代替所需的值并在脚本中使用这些值(?)这样,您可以以更有创意的方式使用该值,或者只是包装在echo
等等中。