Вопрос
Я пишу сценарий оболочки, и мне нужно раздеть, найти меня из чего-то вроде этого:
* *[**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
не существует.
Решение
Я думаю, что вам нужно быть понятным на том, что вы хотите получить. Для меня ваша линия 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, так как вы хотите найти только один экземпляр найти меня,
$ echo "$line" | nawk '{gsub(/.*\*\[\*\*|\*\*\].*/,"");print}'
FIND ME
или если вы используете Bash / ksh на Solaris,
$ line="${line#*\[\*\*}"
$ echo "${line%%\*\*\]*}"
FIND ME