与Ubuntu和OS X之间的sed不同的行为

时间:2018-02-08 12:52:28

标签: macos sed

我正在尝试使用href将基本网址添加到HTML字符串中的一组sed元素。

HTML字符串(单行):

<!-- helpers --> <li> <a href="form-helper/basics/">Form Helper</a> </li> <li> <a href="html-helper/icons/">Html Helper</a> </li> <li> <a href="modal-helper/basics/">Modal Helper</a> </li> <li> <a href="navbar-helper/basics/">Navbar Helper</a> </li> <li> <a href="panel-helper/basics/">Panel Helper</a> </li> </ul>⏎                                                                                    

我的命令(menu.html包含上面的字符串):

site_url='https://example.com'
menu=$(cat menu.html)
echo $menu | sed -E 's@</li>\s+@</li>\n@g' | sed -E 's@href="(.*?)"@href="'"$site_url"'/\1"@g'

这在我的Ubuntu机器上工作正常,但在OS X上,它给了我以下错误:

  

sed:1:&#34; s @ href =&#34;(。*?)&#34; @href =&#34; fo ...&#34;:RE错误:重复运算符操作数无效

有没有办法在Ubuntu和OS X上使上述sed工作?

1 个答案:

答案 0 :(得分:0)

echo $menu | sed -E 's@</li>\s+@</li>\n@g' | sed -E 's@href="([^"]*)"@href="'"$site_url"'/\1"@g'

我认为您尝试的匹配字符不是",因此将.*?替换为[^"]*,它适用于我的MAC操作系统。