当学习使用像grep awk和sed这样的正则表达式匹配工具时,我想出了一个问题,即我们是否可以匹配文本,例如所有非负数,并用它们的平方根替换它们(或者更通用的值)任何功能返回)? 我的意思是这样的:
sed 's/([^-][1-9][0-9]*) /sqrt(\1)/g' text.txt
但显然这个不行。那么可以这样做吗?
答案 0 :(得分:2)
sed
无法评估数字的平方根。您可以改为使用这样的awk:
awk '{ for(i = 1; i <= NF; ++i) if ($i ~ /[^-][1-9][0-9]*/) $i = sqrt($i) }1' file
循环遍历所有字段,如果它与模式匹配,则用平方根替换该值。最后的1
为 true ,以便打印每一行。
答案 1 :(得分: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]