Ваш первый регулярное выражение не работает, потому что квантификатор *
является жадным, то есть соответствует как можно большему числу символов. Поскольку .
также соответствует скобкам, он продолжает совпадать до последней закрывающей скобки ]
, которую он может найти.
Таким образом, у вас в основном есть два варианта: использовать не жадный квантификатор или ограничить типы символов, которым вы можете соответствовать. Вы попробовали второе решение. Вместо этого я бы использовал класс отрицанных символов:
sed 's/\[[^]]*\]//g'
Я не уверен, что в sed есть нежадные квантификаторы, но в perl есть:
perl -lpwe 's/\[.*?\]//g'