LinuxForum.Fans
Тема

Экранирования [ и ] ,в sed

Автор: soln 5 сообщений 1282 просмотров
#196748

Очень странно себя ведет экронирование в квадратных скобочек в sed.
Задача следующая есть массив.
mas[1]=[name]
mas[2]=[name]
и тд
Задача избавится от [,] в значениях массива
то есть
mas[1]=name
mas[2]=name
и тд

решил пользовать sed и наталкнулся на странное

примеры
~$echo [xuz] | sed 's/[\[,\]]//g'
[xuz]

однако отдельно один символ он срезает
~$ echo [xuz] | sed 's/\[//g'
xuz]
soln@solnworkdesktop:~$ echo [xuz] | sed 's/\]//g'
[xuz

Предположил что не работает конструкция перечисление в квадратных скобках, однако

~$ echo [xuz] | sed 's/[\x,\z]//g'
выводит u в квадратных скобках

В результате нашел такую канструкцию

~$ echo [xuz] | sed 's/[],[]//g'
xuz

Вопрос:
Почему [\[,\]] не работает а /[],[]// работает
???

#196999

В классификаторах заэкранировать можно не все символы.
Из BSDшного man re_format(5):

To include a literal `]' in the list, make it the first character (following a possible `^').

Т.е., в регексе '[][]' первый символ - начало классификатора, второй и третий - сам класс символов, четвертый - конец классификатора.

#197000

soln написал:
/[],[]//
Видимо, фича такая.
#197010

спасибо

#197019

[root@crawler01 tmp]# echo 'whazzup [] man?' | tr -d '[]'
whazzup man?

Войдите или зарегистрируйтесь, чтобы ответить.