sed удалить специальные символы и пробелы в строке

sed удалить специальные символы и пробелы в строке

Вход

[*] 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'

Связанный контент