2010-03-05 4 views
2

을 문제와 나는이 같은에서 날 찾아 제거해야합니다솔라리스 AWK 내가 쉘 스크립트를 쓰고 있어요

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

및 배열에 할당합니다. 솔라리스에서 스크립트를 비전 역 영역으로 옮길 때까지 코드를 완벽하게 작동 시켰습니다. 여기에 내가 전에 사용 된 코드는 다음과 같습니다

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

이제 인쇄 : 그것은 내가 nawk과 같은 명령을 시도하지만 대신 지금이 오류를받을 것을 제안했다

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

:

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으로 원하는 것을 할 수있는 방법이 있을까요?

편집 : 당신이 실제로 선택 줄에서 "ME 찾기"가 아니라 그것을 제거하려는 의견에서

.

nawk에 의해 수락 된 정규 표현식의 언어가 gawk과 다른 것으로 생각됩니다. 따라서 작업에 더 적합한 도구가 필요합니다. 이 같은

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

그것은 awk로 나를 위해 일했으며, 성공적으로 노킹 출력을 테스트하지 못했습니다. 여기에 내가 원하는 무엇 : 는 그 $ 선을 알고 = * * ** FIND_ME **] (find_me) * 내가 objectArray을 [$ 내가] = FIND_ME Sed의이 작동 할 수 있습니다 , 내가 줄 것이다 할당 할 이 시도. – pws5068

+0

그런 선에서 실제로 "FIND_ME"를 선택 하시겠습니까? –

+0

죄송합니다, 사용해보십시오 echo "* * [** FIND_ME **] (find_me) *"| awk -F '* [** | **]' '{print $ 2}' – pws5068

1

인용하여 $line 변수 : "$line". 여전히 작동하지 않는 경우에만 ME 찾기의 한 인스턴스를 찾으려하기 때문에 당신이 떠들썩한 파티를 사용하는 경우, 당신은 Solaris에서 /, 그것을 KSH을

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

또는 nawk와 다른 방법을 수행 할 수 있습니다

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

셸 전용 솔루션은 Solaris에 있어야하는 ksh에서도 작동해야합니다. –

+0

큰 따옴표를 사용해야합니다.'line = "$ {line # * [\ * \ *}"; echo "$ {line %% \ * \ *] *}"' –

+0

흠, 여기에도 더 많은 백 슬래시가 필요합니다.'line = "$ {line # * \ [\\ * \\ *}"; echo "$ {line %% \\ * \\ * \] *}"' –