#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 раза, я получу то, что мне нужно. Но есть ли какой-нибудь способ, как это сделать, не откладывая в цикле?
Ответ №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. Работает как шарм, хороший хак. Спасибо