Мне нужно sed, чтобы удалить первый и последний символ строки, например, источник
(192.168.3.0)
результат
192.168.3.0
пробуя таким образом:
sed 's/^.\(.*\).$/\1/'
но затем он также удаляет символ 0
как избежать такого поведения?
Как насчет этого:
$ echo "(192.168.3.0)" | sed 's/^.//;s/.$//'
192.168.3.0
Хотя ваша команда тоже работает:
$ echo "(192.168.3.0)" | sed 's/^.\(.*\).$/\1/'
192.168.3.0
Как указывали другие, использованный вами шаблон sed неверен, и его можно исправить, чтобы правильно удалить первый и последний символы.
В качестве альтернативы, в вашем конкретном примере, если все, что вы действительно хотите сделать, это удалить круглые скобки (оставив только IP-адрес), тогда более простой подход может выполнить эту работу.
Например, это tr
отфильтровывает все круглые скобки из своего ввода:
tr -d '()'
Это эквивалентно следующему sed
:
sed -e 's/[()]//g'
Если вы действительно хотите знать, как удалить первый и последний символы, посмотрите другие ответы.
Приведенные ответы верны. Ответ janos более идеален для вашей ситуации, но не обобщен. Чтобы предоставить еще пару способов, связанных с ответом Sethos II:
$ echo "(192.168.3.0)" | sed -E 's/(^.)|(.$)//g'
192.168.3.0
$ echo "(192.168.3.0)" | sed 's/\(^.\)\|\(.$\)//g'
192.168.3.0
Все четыре действительны. TMTOWTDI.