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
我正在尝试在添加值时进行简单的查找替换数字,但在 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