sed 's/\[[^]]*\]//g'
читает: заменить любую строку литералом "[", за которым следует ноль или более символов, которые не являются "]", а затем закрывающим "]" пустой строкой.
Вам нужен бит [^]]
, чтобы жадное сопоставление не воспринималось как «[1] sdc2 [0]» как одиночное совпадение в строке образца.
Что касается вашего комментария:
sed 's#\([^[ ]*\)\[[^]]*\]#/dev/\1#g'
- Я переключаю разделитель с обычного '/' на '#', просто чтобы избежать экранирования запрашиваемого вами бита
/dev/
(я не буду говорить "для ясности") - бит
\(...\)
соответствует подгруппе, в данном случае sdc2 или как угодно, поэтому мы можем ссылаться на нее при замене - подгруппа использует класс символов, аналогичный тому, который мы использовали для отбрасывания индекса:
[^[ ]
означает любуюсимвол, кроме «[» (опять же, чтобы избежать жадного совпадения с индексом) или пробел (при условии, что ваши значения разделены пробелом согласно вашему сообщению) - замена теперь является литералом «/ dev /», за которым следуетпри первом (и единственном) совпадении подгруппы
- флаг
g
в конце говорит it выполнить несколько совпадений в одной строке вместо остановки на первой