Учитывая строку как это: "hello my (name) is (user)
, как я могу удалить все '()'
использование sed?
То, что я в настоящее время делаю, выделяет строку с помощью визуального блока, и затем :s/(//g
и снова для )
. Есть ли способ удалить обоих (, )
в одной команде sed?
Моя конечная цель "hello my name is user"
Можно использовать tr -d '()' <infile
также.
Можно использовать класс символов [()]
как шаблон Regex и замена шаблон с пустой строкой для удаления их:
sed 's/[()]//g'
Так:
% sed 's/[()]//g' <<<"hello my (name) is (user)"
hello my name is user
g
модификатор делает операцию на всех соответствиях, иначе sed
остановится после первого соответствия.
Можно сохранить содержание скобки в группе и замене этим:
sed 's/(\([^)]*\))/\1/g'
Это сохраняет все в скобках ([^)]*
просто соответствия все кроме )
) в группе 1 и заменах целая скобка им. Выполнение этого g
lobally средства сделать это для каждой пары скобок в строке.
$ echo '"hello my (name) is (user)"' | sed 's/(\([^)]*\))/\1/g'
"hello my name is user"