Mac OS X sed regexp

时间:2015-01-26 11:29:57

标签: macos sed

我试图在添加值时简单地查找替换数字但在Mac OS X下没有这样做,例如

echo "abc top: 234px" |sed -E 's/top:[[:space:]]*([0-9]+)/echo $(echo "\1+16"|bc)/g' 

应输出:"abc top: 250px"

而是输出:abc echo $(echo "234+16"|bc)px

3 个答案:

答案 0 :(得分:2)

这是awk

echo "abc top: 234px" | awk '$NF=$NF+16"px"'
abc top: 250px

搜索top时更加强大:

echo "abc top: 234px" | awk '/top:/ {$NF=$NF+16"px";print}'
abc top: 250px

此处您不需要格式前缀px

echo "abc top: 234px" | awk 'sub(/[0-9]+/,$NF+16)'
abc top: 250px

echo "abc top: 234px" | awk '/top:/ {sub(/[0-9]+/,$NF+16);print}'
abc top: 250px

答案 1 :(得分:1)

您无法使用外部命令返回反向引用 - 评估echo | bc时(一旦修复引用以便首先对它们进行评估),{{1}脚本尚未解析。

您可以做的是切换到允许对捕获值进行算术运算的工具。

sed

答案 2 :(得分:1)

难以使用sed,但这是一个perl解决方案:

$ echo "abc top: 234px" | perl -pe 's/(\d+)/16 + $1/ge'
abc top: 250px
相关问题