Solaris awk Проблемы

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

Решение

Я думаю, что вы должны быть яснее о том, что вы хотите получить. Для меня твоя линия awk не "раздевай меня"

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

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

РЕДАКТИРОВАТЬ:

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

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

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

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

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

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

$ line="${line#*\[\*\*}"
$ echo "${line%%\*\*\]*}"
FIND ME
Другие вопросы по тегам