2

我正在编写一个 shell 脚本,我需要将 FIND ME 从以下内容中删除:

* *[**FIND ME**](find me)*

并将其分配给一个数组。我的代码完美无缺……直到我将 Solaris 中的脚本移动到非全局区域。这是我之前使用的代码:

objectArray[$i]=`echo $line | nawk -F '*[**|**]' '{print $2}'`

现在打印:

awk: syntax error near line 1  
awk: bailing out near line 1

有人建议我使用 nawk 尝试相同的命令,但我现在收到此错误:

nawk: illegal primary in regular expression `* *[**|**]` at  `*[**|**]`
 input record number 1
 source line number 1

还有,/usr/xpg4/bin/awk不存在。

4

2 回答 2

1

我认为你需要更清楚你想要得到什么。对我来说,您的 awk 行不会“将 FIND ME 排除在外”

echo "* *[**FIND ME**](find me)*" | nawk -F '* *[**|**]' '{print $2}'
[

因此,如果您提供一些您期望的输入/输出示例,将会有所帮助。也许有办法做你想做的事sed

编辑:

从您实际上想要从行中选择“找到我”的评论中,而不是将其删除。

我猜这个接受的正则表达式的方言nawk不同于gawk. 因此,也许更适合这项工作的工具是有序的。

echo "* *[**FIND ME**](find me)*" | sed -e"s/.*\* \*\[\*\*\(.[^*]*\)\*\*\].*/\1/"
FIND ME
于 2010-03-05T16:29:04.390 回答
1

像这样引用你的$line变量:"$line". 如果还是不行,你可以用 nawk 做另一种方法,因为你只想找到一个 FIND ME 实例,

$ echo "$line" | nawk '{gsub(/.*\*\[\*\*|\*\*\].*/,"");print}'
FIND ME

或者如果您在 Solaris 上使用 bash/ksh,

$ line="${line#*\[\*\*}"
$ echo "${line%%\*\*\]*}"
FIND ME
于 2010-03-06T00:11:48.157 回答