gpt4 book ai didi

regex - 使用正则表达式替换替换多个字符

转载 作者:行者123 更新时间:2023-12-02 05:33:59 25 4
gpt4 key购买 nike

我正在尝试对 acpi 命令的输出执行正则表达式替换。我的 perl 一个类轮是:

acpi | perl -F/,/ -alne 'print $F[1] if ($F[1]=~s!\s|%!!)'

上面一个衬里的输出是 87% 而我需要的输出只是 87 所以它没有替换字符串中的 % .

现在acpi命令的输出是

Battery 0: Discharging, 87%, 05:54:56 remaining

print $F[1] 的输出是

ronnie@ronnie:~$  acpi | perl -F/,/ -alne 'print $F[1]'
87% #space followed by 87%#
ronnie@ronnie:~$

现在奇怪的是,如果我尝试使用相同的 perl 单行代码:

echo " 86%" | perl -nle 'print if s!\s|%!!g'

它工作正常并输出 86

那么,为什么它不能与 acpi 命令一起工作。

PS:我知道这可以通过使用 sed/awk 来实现,但我很想知道为什么我的解决方案不起作用。

最佳答案

您的单行无法按预期工作,因为

s!\s|%!!

替换 空格 百分号,但不能同时替换两者。

如果你想让它替换两者,添加全局 /g 修饰符:

s!\s|%!!g

正如您在其他示例中巧合所做的那样。

您也可以考虑使用字符类代替交流发电机:

s![\s%]!!g

如果您的输出遵循您显示的格式,您最好使用简单的正则表达式:

echo Battery 0: Discharging, 87%, 05:54:56 remaining|perl -nlwe 'print /(\d+)%/'
87

关于regex - 使用正则表达式替换替换多个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12369064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com