Вопрос

Я пишу сценарий оболочки, и мне нужно раздеть, найти меня из чего-то вроде этого:

* *[**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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top