Grep Regex захваченные группы - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть строки, подобные приведенным ниже, в файле

[Lorem ipsum] - [ipsum23] - Lorem ipsum dolor sit amet.

И я хочу использовать grep '[regex]', чтобы получить следующие результаты:

[Lorem ipsum] - Lorem ipsum dolor sit amet.

У меня есть приведенное ниже регулярное выражение, но я не уверен, как просто использовать захваченные группы с grep

grep -oP '(\[[^\]]+\]).+\](.+)'

Я пробовал:

grep -oP '(\[[^\]]+\])\1.+\](.+)\2'

grep -oP '(\[[^\]]+\])\k.+\](.+)\2'

[^\-]*\-(?<=\-).*

(?<!\-).+(?=\-) - Также попытался использовать Lookaround, чтобы посмотреть, смогу ли я просто начатьи конец и пропустить среднюю часть, но это не сработало, как я ожидал

Или будет лучше использовать для этого sed?Или другой подход к регулярному выражению?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

grep для выбора, sed для замены.Просто сопоставьте часть, от которой вы хотите избавиться, и ничего не заменяйте:

echo "[Lorem ipsum] - [ipsum23] - Lorem ipsum dolor sit amet." | sed "s/ \[.*?\] -//"

Вывод: [Lorem ipsum] - Lorem ipsum dolor sit amet.

Демо: https://regex101.com/r/aElbgM/1

0 голосов
/ 21 февраля 2019

А как насчет чистого решения BASH?Примерно так:

s='[Lorem ipsum] - [ipsum23] - Lorem ipsum dolor sit amet.'
if [[ $s =~ (.*)\ -\ (.*)\ -\ (.*) ]]; then
    echo "${BASH_REMATCH[1]} - ${BASH_REMATCH[3]}"
fi

В результате получается:

[Lorem ipsum] - Lorem ipsum dolor sit amet.
...