2010-03-05 124 views
2

我正在写一个shell脚本,我需要剥离找到我的是这样的:的Solaris awk的烦恼

* *[**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不存在。

回答

1

我认为你需要更清楚你想得到什么。对我来说,你的awk行不“脱光找到我”

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

所以,如果你给的输入/输出你期待的一些例子,这将有助于。也许有一种方法可以用sed做你想做的事情?

编辑:

从你真的想选择“FIND ME”从行,不剥离出来的意见。

我猜这个nawk接受的正则表达式的方言不同于gawk。所以也许一个更适合这项工作的工具是有条件的。

echo "* *[**FIND ME**](find me)*" | sed -e"s/.*\* \*\[\*\*\(.[^*]*\)\*\*\].*/\1/" 
FIND ME 
+0

它用awk工作,我没有成功测试nawk输出。这是我想要的东西: 我知道,$线= * [** ** FIND_ME(find_me)* ,我要指派objectArray [$ i] = FIND_ME 桑达可能的工作,我会给这是一个尝试。 – pws5068 2010-03-05 16:32:42

+0

所以你真的想从这些行中选择“FIND_ME”? – 2010-03-05 16:41:55

+0

对不起,试试这个: echo“* * [** FIND_ME **](find_me)*”| awk -F'* [** | **]''{print $ 2}' – pws5068 2010-03-05 16:42:14

1

报价您的$line变量是这样的:"$line"。如果仍不能正常工作,你可以做到这一点与NAWK另一种方式,因为你只想要找到FIND ME的一个实例,

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

,或者如果你使用bash/ksh的Solaris上,

$ line="${line#*\[\*\*}" 
$ echo "${line%%\*\*\]*}" 
FIND ME 
+0

shell-only解决方案也应该与ksh一起工作,它应该在Solaris – 2010-03-06 01:09:32

+0

上应该使用双引号:'line =“$ {line#* [\ * \ *}};回声“$ {line %% \ * \ *] *}”' – 2010-03-06 01:16:11

+0

嗯,这里也需要更多的反斜杠:'line =“$ {line#* \ [\\ * \\ *}”; echo“$ {line %% \\ * \\ * \] *}”' – 2010-03-06 01:28:09