Mac OS X sed 正则表达式

Mac OS X sed regexp

我正在尝试在添加值时进行简单的查找替换数字,但在 Mac OS X 下未能这样做,例如

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

应该输出:"abc top: 250px"

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

您不能使用外部命令返回反向引用——当 echo | bc 被求值时(一旦您修复了引号以便它们首先被求值),sed 脚本尚未解析。

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

echo "abc top: 234px" |
perl -pe 's/(top:\s*)(\d+)/ sprintf("%s%i", , 16+)/ge'

使用 sed 有困难,但这里有一个 perl 解决方案:

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

这是一个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