greediness in sed

前端 未结 5 583
南旧
南旧 2021-01-16 16:14

I want

ereg ($rat, $dog, $cat)

to become

preg_match (\'#\'.$rat.\'#\', $dog, $cat)

To achieve this, I did

5条回答
  •  南方客
    南方客 (楼主)
    2021-01-16 16:52

    I rather like Perl regexs (easier to write):

    echo 'ereg ($rat, $dog, $cat)' | perl -pe 's/ereg\s*\(\s*(\$[^,]+),(.+)\)/preg_match("#" . $1 . "#", $2)/g'
    

    or better (for PHP):

    echo 'ereg ($rat, $dog, $cat)' | perl -pe 's/ereg\s*\(\s*(\$[^,]+),(.+)\)/preg_match("#{$1}#", $2)/g'
    

    In sed, it would be:

    echo 'ereg ($rat, $dog, $cat)' | sed -e 's/ereg\s*(\s*\(\$[^,]\+\),\(.\+\))/preg_match("#" . \1 . "#", \2)/'
    

    Too many backslashes!!!

提交回复
热议问题