Совпадения имеют общую проблему с пробелами

#regex #bash #awk #sed

#регулярное выражение #bash #awk #sed

Вопрос:

Короче говоря, я хочу удалить слово с соответствующими пробелами

Требуется:
abc test test def -> abc def

Но:
abc xtest xtest def -> abc xtest xtest def (просто чтобы иметь в виду)

Я пытался:

 $ echo "abc test test def" | sed "s/s<test>s/ /g"
abc test def
  

Итак, если я применю это регулярное выражение 2 раза, я получу то, что мне нужно. Но есть ли какой-нибудь способ, как это сделать, не откладывая в цикле?

Совпадения разделяют общие пробелы pic

Ответ №1:

 echo "abc test test def" | sed "s/s(<test>s)*/ /g"
  

=> abc def

 echo "abc test test def test " | sed "s/s(<test>s)*/ /g"
  

=> abc def

Это ищет пробел s , за которым следует, возможно, повторяющаяся группа <test>s . Ища группу, которая повторяется неопределенное количество раз, мы можем обработать случай, когда есть только один test , а также обработать особый случай, когда есть смежные test test .

Комментарии:

1. Работает как шарм, хороший хак. Спасибо