Windows cygwin上的sed行为不一致
我一直面临一个问题,某个sed表达式在一个windows系统上工作,在另一个windows系统上中断。shell脚本正在cygwin上运行,其中cygwin和sed版本是相同的 表达方式:Windows cygwin上的sed行为不一致,windows,sed,cygwin,Windows,Sed,Cygwin,我一直面临一个问题,某个sed表达式在一个windows系统上工作,在另一个windows系统上中断。shell脚本正在cygwin上运行,其中cygwin和sed版本是相同的 表达方式: url=$(echo ${!1} | sed 's/{/\\\{/g'); \ 系统上的错误为: Error: /usr/bin/sed: -e expression #1, char 2: unterminated `s' command 因此,当我通过转义大括号来使用它时,它会起作用: url=$(e
url=$(echo ${!1} | sed 's/{/\\\{/g'); \
系统上的错误为:
Error: /usr/bin/sed: -e expression #1, char 2: unterminated `s' command
因此,当我通过转义大括号来使用它时,它会起作用:
url=$(echo ${!1} | sed 's/\{/\\\{/g'); \
但是,另一个错误是:
sed: -e expression #1, char 11: Invalid preceding regular expression
请帮忙。。坚持了一段时间。如果您需要更多详细信息,请告诉我。替换为
\{
echo ${!1} | sed -e 's/{/\\{/g'
或者通过\{
echo ${!1} | sed -e 's/{/\\\\{/g')
3\
和没有明确的-e
肯定是问题所在
信息:my cygwin上的代码没有错误(使用直接字符串代替${!1}
如果您转义第一个
{
,sed正在等待大量的出现正则表达式和右大括号(例如:\{1,\}
)echo${!1}的输出是什么?第一个在LFS系统上运行,Cygwin 32位和Cygwin 64位。第二个在所有三个系统上都有错误。这对我来说很有意义。既然你说这是一个shell脚本,那么你运行的是同一版本的shell(看起来像某个“sh”后代)你正在使用?@Chris J.Breisch我正在使用sh作为shell。是的,第二个sed是问题所在。但真正的问题在于理解哪个cygwin或sed在不同的windows机器上给出不同的结果(唯一的区别是32位与64位)@NeronLeVelu感谢您的解决方案,但我真正的问题是在不同的windows+cygwin机器上获得不同的结果。如果sed/shell代码编写不正确,有没有关于解决此类可移植性问题的建议(太多或缺少`您不能假设结果是相同的,这取决于环境。有些人会让`成为一个``而其他人会通过对下一个信息或其他行为采取行动来删除它。