Подстрока с использованием Regex в Shell или bash - PullRequest
0 голосов
/ 17 марта 2020

У меня огромный текстовый файл с такими строками, как следующие:

"https://www.wayfair.ca/appliances/pdp/agua-canada-30-500-cfm-ducted-wall-mount-range-hood-agcd1041.html?piid=47570655"
"https://www.wayfair.ca/appliances/pdp/agua-canada-30-500-cfm-ducted-wall-mount-range-hood-agcd1041.html?piid=47570656"
"https://www.wayfair.ca/appliances/pdp/agua-canada-30-500-cfm-ducted-wall-mount-range-hood-agcd1042.html"
"https://www.wayfair.ca/appliances/pdp/agua-canada-30-500-cfm-ducted-wall-mount-range-hood-agcd1043.html?piid=47570657"
"https://www.wayfair.ca/appliances/pdp/agua-canada-30-500-cfm-ducted-wall-mount-range-hood-agcd1043.html?piid=47570658"

Я хочу извлечь буквенно-цифровой символ c после последнего вхождения '-' и до '. html' (только 'agcd1043') и сохраните эти значения в другом файле.

Пожалуйста, помогите мне сделать это с помощью регулярных выражений (. - (. +). html. - это регулярное выражение I используется для NPP для небольших файлов) или любой другой метод. ТИА

1 Ответ

0 голосов
/ 17 марта 2020

Вы можете извлечь строку с помощью sed:

sed 's/.*-\([^-]*\)\.html.*/\1/' <<< "https://www.wayfair.ca/appliances/pdp/agua-canada-30-500-cfm-ducted-wall-mount-range-hood-agcd1041.html?piid=47570655"

Если у вас есть все строки в файле, вы можете итерировать по нему:

while read line
do
  variable=$(sed 's/.*-\([^-]*\)\.html.*/\1/' <<< $line)
  # ... use the value from $variable
done < /path/to/file

sed сценарий - это замена , где:

  • .*-\([^-]*\)\.html.* - это шаблон
  • \1 - это замена

шаблон написан так, что он захватывает любую последовательность не дефисных символов, то есть [^-]*, заключенную между символом переноса - и строкой .html. Точечный символ экранируется для целей регулярных выражений, следовательно, шаблон \.html. Ведущий рекламный ролик .* должен убедиться, что все, что находится до дефиса и после html, также захвачено, иначе они появятся в выходных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...