Solaris awk Проблемы - PullRequest
       22

Solaris awk Проблемы

2 голосов
/ 05 марта 2010

Я пишу сценарий оболочки, и мне нужно удалить 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 не существует.

Ответы [ 2 ]

1 голос
/ 06 марта 2010

цитируйте вашу $line переменную следующим образом: "$line".Если все еще не работает, вы можете сделать это по-другому с nawk, так как вы хотите найти только один экземпляр FIND ME,

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

или если вы используете bash / ksh в Solaris,

$ line="${line#*\[\*\*}"
$ echo "${line%%\*\*\]*}"
FIND ME
1 голос
/ 05 марта 2010

Я думаю, вам нужно уточнить, что вы хотите получить. Для меня твоя awk-линия не «раздирает меня»

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

Так что было бы полезно, если бы вы привели несколько примеров ожидаемого ввода / вывода. Может быть, есть способ сделать то, что вы хотите с sed?

EDIT:

Из комментариев вы действительно хотите выбрать «НАЙТИ МЕНЯ» из строки, а не вырезать ее.

Полагаю, диалект регулярных выражений, принятых этим nawk, отличается от gawk. Так что, возможно, инструмент, который лучше подходит для этой работы, в порядке.

echo "* *[**FIND ME**](find me)*" | sed -e"s/.*\* \*\[\*\*\(.[^*]*\)\*\*\].*/\1/"
FIND ME
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...