Как я могу удалить скобки включения из строки?

Учитывая строку как это: "hello my (name) is (user), как я могу удалить все '()' использование sed?

То, что я в настоящее время делаю, выделяет строку с помощью визуального блока, и затем :s/(//g и снова для ). Есть ли способ удалить обоих (, ) в одной команде sed?

Моя конечная цель "hello my name is user"

4
задан 11 February 2019 в 05:59

3 ответа

Можно использовать tr -d '()' <infile также.

13
ответ дан 23 November 2019 в 11:34

Можно использовать класс символов [()] как шаблон Regex и замена шаблон с пустой строкой для удаления их:

sed 's/[()]//g'

Так:

% sed 's/[()]//g' <<<"hello my (name) is (user)"
hello my name is user

g модификатор делает операцию на всех соответствиях, иначе sed остановится после первого соответствия.

13
ответ дан 23 November 2019 в 11:34

Можно сохранить содержание скобки в группе и замене этим:

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

Это сохраняет все в скобках ([^)]* просто соответствия все кроме )) в группе 1 и заменах целая скобка им. Выполнение этого globally средства сделать это для каждой пары скобок в строке.

Пример использования

$ echo '"hello my (name) is (user)"' | sed 's/(\([^)]*\))/\1/g'
"hello my name is user"
4
ответ дан 23 November 2019 в 11:34

Другие вопросы по тегам:

Похожие вопросы: