Назад | Перейти на главную страницу

удаление первого и последнего символа в каждой строке / sed

Мне нужно 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.