繁体   English   中英

使用sed以平方根替换数字

[英]Using sed to replace numbers by their square roots

当学习使用像grep awk和sed这样的正则表达式匹配工具时,我想出了一个问题,即我们是否可以匹配文本,例如所有非负数,并用它们的平方根替换它们(或者更通用的任何返回的值)功能)? 我的意思是这样的:

sed 's/([^-][1-9][0-9]*) /sqrt(\1)/g' text.txt

但显然这个不行。 那么可以这样做吗?

sed无法评估数字的平方根。 您可以改为使用这样的awk:

awk '{ for(i = 1; i <= NF; ++i) if ($i ~ /[^-][1-9][0-9]*/) $i = sqrt($i) }1' file

这将遍历所有字段,如果它与模式匹配,则使用平方根替换该值。 最后的1真的,以便打印每一行。

我不知道用sed做的方法,但是如果你愿意使用perl:

perl -pe 's/(?<![\-\d])(\d+)/sqrt($1)/eg' text.txt

我改变了正则表达式,因为你的( ([^-][1-9][0-9]*)

  • 包括匹配中的前一个字符,例如2;345; 会匹配;345
  • 需要前面的字符,例如2;345; 不会匹配2
  • 可以匹配一个数字,所以例如-12将匹配121匹配[^-]2匹配[1-9]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM