[英]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
将匹配12
( 1
匹配[^-]
和2
匹配[1-9]
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.