Удаление строки из уже захваченного регулярного выражения группы - PullRequest
0 голосов
/ 26 апреля 2020

Необходимо получить регулярное выражение для следующих условий:

Захваченная группа будет содержать ожидаемый вывод, если в строке присутствует «GM5», она не должна входить в окончательную группу захвата

CURRENT:

  • 123456_GM5_testing.csv
  • 123456_GM5_ekko.csv. json
  • 123456_TN_TECH_CHECK_IMAGES.csv * 1012_ * 6_NECH213CN
  • 103NH * 133NH * 133NH * 133NH * 133NH * 133NH * 133NH * 133NH * 133NT * 233N_KH * 133NH * 133NH * 133NH3 * 133NT * 213NK * 133NH3 * 133NK * 133NH3 * 133NH3 * 133NK * 133NK * 133NH3 * 133NKN * 133NH3 * 133N * 133NH * 133NH * 133 * 133NH * 133 * 133N_KH * 133NH * 133 * 133N_KH * 133 * 133N_KN *

Ожидаемый ВЫХОД:

  • testing.csv
  • ekko.csv. json
  • TN_TECH_CHECK_IMAGES.csv
  • TN_TECH_CHECK_IMAGES.csv. json

Текущее решение: ([A-Z].+)

Проблема: «GM5» все еще находится в захваченной группе, которую необходимо удалить

1 Ответ

1 голос
/ 26 апреля 2020

В Bash вы можете использовать

rx='(_GM5)?_(.*)'

Регулярное выражение будет соответствовать необязательной последовательности _GM5 (захватывая ее в группе 1, помните, что синтаксис Bash POSIX ERE не поддерживает не захватывает группы), а затем _ будет сопоставлено, а остальная часть строки будет записана в Группу 2, и вы можете получить это значение, используя ${BASH_REMATCH[2]}.

См. онлайн Bash демо :

#!/bin/bash
s="123456_GM5_testing.csv
123456_GM5_ekko.csv.json
123456_TN_TECH_CHECK_IMAGES.csv
213456_TN_TECH_CHECK_IMAGES.csv.json"

rx='(_GM5)?_(.*)'
while read -r line
do
  if [[ "$line" =~ $rx ]]; then
    echo "$line => ${BASH_REMATCH[2]}";
  fi;
done <<< "$s"

Вывод:

123456_GM5_testing.csv => testing.csv
123456_GM5_ekko.csv.json => ekko.csv.json
123456_TN_TECH_CHECK_IMAGES.csv => TN_TECH_CHECK_IMAGES.csv
213456_TN_TECH_CHECK_IMAGES.csv.json => TN_TECH_CHECK_IMAGES.csv.json

Если вам нужно решение sed, используйте

sed 's/^[^_]*\(_GM5\)\{0,1\}_//'

См. это онлайн-демо

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