我有一个在线工作的shell脚本here,但不能在终端本地工作。可能的原因是什么?我该如何调试?
#!/bin/bash
string='internal func add() -> Int'
sed -e '
s/^.*func \+//
s/ *\->.*$//
s/:[^,)]\+/:/g
s/[, ]//g
' <<< "$string"
echo $SHELL
对于shell脚本中存在的输入,我在本地计算机上获取internalfuncadd()
,而不是add()
- 这是我上网的正确输出。
答案 0 :(得分:3)
您的问题是您正在使用BSD sed(与Mac OS X一起使用)而不是GNU sed(通常在Linux上找到)。 BSD sed不支持GNU sed的某些功能,包括基本正则表达式中的\+
。您可以使用\{1,\}
:
#!/bin/bash
string='internal func add() -> Int'
sed -e '
s/^.*func \{1,\}//
s/ *\->.*$//
s/:[^,)]\{1,\}/:/g
s/[, ]//g
' <<< "$string"
...或者使用-E
切换到扩展的正则表达式,尽管这需要使用该语法编写正则表达式。 (在此特定情况下,所需的更改是使用+
而不是\+
; \+
表示扩展语法中的文字+