
Вход
[*] 111, 22, 33, 44
Выход
111,22,33,44
Используя sed
команду, sed 's/^\[\*\][[:space:]]*//' file
мы смогли отобразить вывод, 111, 22, 33, 44
который означает, что место еще есть.
Так какая же sed
команда правильная?
решение1
Короткий ответ: это должно сделать то, что вам нужно:
sed 's/[][*]\|[[:space:]]//g'
Проверьте это следующим образом:
echo '[*] 111, 22, 33, 44' | sed 's/[][*]\|[[:space:]]//g'
Выход:
111,22,33,44
Далее следует более подробное объяснение.
Ключевым компонентом, которого не хватало в вашем выражении, было использованиекомандаg
для выполнения глобальной замены. Без этой команды будет заменено только первое совпадение в каждой строке.
Самая контринтуитивная часть (по моему мнению) моего решения — как включить квадратные скобки в класс символов. Для этого мы ссылаемся наруководство по sed:
‘]’ ends the bracket expression if it’s not the first list item. So, if you want to make the ‘]’ character a list item, you must put it first.
Более подробное обсуждение этой темы см. в следующем посте на SeverFault:
В качестве альтернативы вы могли бы взять свое выражение и вставить его в другую sed
команду, например:
echo '[*] 111, 22, 33, 44' \
| sed 's/^\[\*\]//' \
| sed 's/[[:space:]]//g'