Несколько совпадений с шаблоном в одной команде sed - PullRequest
1 голос
/ 27 апреля 2020

Допустим, у меня есть эта строка,

asdfd ERROR [asdfa:11] (12312) [asdfiel-asdf-asdf] some random text

, и я хочу удалить текст внутри круглых скобок ((…)) и второе вхождение текста в квадратных скобках ([…]), так что вывод будет

asdfd ERROR [asdfa:11] some random text

Как мне сделать это без использования оператора канала и без единой команды sed?

1 Ответ

0 голосов
/ 28 апреля 2020

В указанном вами случае c нет необходимости выполнять две команды. Вы можете просто сделать это

sed 's/(.*] //' yourfile

(обратите внимание, здесь нет необходимости экранировать ]). Очевидно, что это удалит из первой открывающей скобки в строке до последней закрывающей квадратной скобки после нее (что может отличаться от второй, если после второй группы есть другие […] группы.

Другой, более точный способ сделать это может быть,

sed 's/([^)]*) *\([^[]*\) *\[[^]]*\] /\1/' yourfile

где ([^)]*) соответствует первой группе (…), \([^[]*\) соответствует и фиксирует следующую последовательность из нуля или более не [, а \[[^]]*\] соответствует первой группе […] после нее. (Два * и последний являются попыткой избавиться от всех пробелов, следующих за ) и предшествующих [, и могут быть скорректированы при необходимости.)

...