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