Sed 仅打印匹配的表达式

Sed 仅打印匹配的表达式

如何让 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等等中。

相关内容