Basi c awk вопрос относительно включения пробела в FS с экранированным символом - PullRequest
0 голосов
/ 04 апреля 2020

Пожалуйста, прости базовый c вопрос. Я прочитал большое количество связанных тем и не наткнулся на рабочее решение.

Просто нужно перехватить содержимое строки между "[" и "]". Обратите внимание на пробелы там.

код:

echo "*** This is a bunch of text output [ xxxxxxxxxx ]." | awk -F "[\\\[|\\\]]" '{print $2}'
 xxxxxxxxxx 

Я получаю начальные и конечные пробелы на выходе. Я пробовал так много разных вариантов, пытаясь получить буквальное или регулярное соответствие, чтобы включить квадратные скобки и вместе в качестве FS, но не получилось. Я уверен, что мне не хватает чего-то супер базового c, поскольку это действительно ново для меня.

Полагаю, я мог бы удалить начальные и конечные пробелы в качестве второй операции, но, похоже, мне следует в состоянии выполнить sh это в выражении awk, если бы я мог получить правильный формат FS.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 04 апреля 2020

Поставьте * до и после [\[\]], чтобы соответствовать пробелам. Кроме того, вам не нужно | в наборе символов.

echo "*** This is a bunch of text output [ xxxxxxxxxx ]." | awk -F ' *[][] *' -v '{print $2}'

Кроме того, awk не поддерживает экранированные [ и ] внутри классов символов. Способ включения этих символов состоит в том, чтобы поместить ] в начале - у вас не может быть пустого набора символов, поэтому это означает, что это фактический символ, а не конец набора.

0 голосов
/ 04 апреля 2020

Это то, что я придумал.

echo "*** This is a bunch of text output [ xxxxxxxxxx ]." | awk -F'[][ ]+' '{print $(NF-1)}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...