2010-03-05 122 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