Bash — извлечение подстроки в строке со специальными символами

#bash #substring

#bash #подстрока

Вопрос:

Я пытаюсь извлечь 43 (результат downloader / request_count) в строке ниже:

 OUT="[scrapy.statscollectors] INFO: Dumping Scrapy stats: {'downloader/request_bytes': 21394, 'downloader/request_count': 43, 'downloader/request_method_count/GET': 43, 'downloader/response_bytes': 1030981, 'downloader/response_count': 43, 'downloader/response_status_count/200': 43, 'item_scraped_count': 41"
  

На первом шаге я выполнил value=${OUT#*request_count':} , который возвращает:

 43, 'downloader/request_method_count/GET': 43, 'downloader/response_bytes': 1030981, 'downloader/response_count': 43, 'downloader/response_status_count/200': 43, 'item_scraped_count': 41
  

Но когда я пытаюсь удалить правую часть, я получаю сообщение об ошибке:

 value2=${value%,*} 
  

или

 value2=$(cut -d, -f1 $value)
  

Есть идеи?

Заранее спасибо за вашу помощь!

Ответ №1:

% удаляет максимально короткую строку, используйте %% для удаления максимально длинной:

 value2=${value%%,*}
#             ~~
  

Кроме того, вы также можете удалить пробел после двоеточия:

 value=${OUT#*request_count': }
#                            ~