Вам нужно echo
по струне через трубу grep
:
array=($(echo "$matchString" | grep -o 'url={"urlPath":"([^"]+)"'))
Grep читает из файла или стандартного ввода. Он не принимает строковый аргумент для поиска внутри.
Кроме того, grep
будет выводить все совпадение, а не часть в скобках. Вам, вероятно, нужно использовать sed
.
array=($(echo "$matchString" | sed 's/url={"urlPath":"\([^"]\+\).*"/\1/'))
Команда sed
работает следующим образом:
s///
- команда замены и ее разделители. Вы можете использовать другой разделитель для удобства, если он делает выражение более читабельным или помогает избежать необходимости выполнять экранирование. Между первыми двумя разделителями есть то, что мы хотим изменить. Между средним и последним - то, что мы хотим изменить.
url={"urlPath":"
- это буквальный текст, который мы используем для сопоставления
\( \)
включает группу захвата. То, что падает здесь, - это то, что мы хотим поймать.
[^"]
соответствует любому символу, который не является двойной кавычкой
\+
соответствует одному или нескольким предыдущим образцам. Итак, в данном случае это один или несколько символов, которые не являются кавычками.
.*
соответствует нулю или более любого символа. В этом случае он начинается с кавычки после google.com/
и продолжается до конца строки.
\1
выводит то, что было захвачено первой (и только в этом случае) группой захвата.
Визуально:
url={"urlPath":" http://www.google.com/ ","thisIsOtherText"
-----literal---- -------non-quote------ ---any character---
url={"urlPath":" \( [^"] \) .*