Как заставить sed заменять всех кроме одного символа

У меня есть оператор формы atPhysAddress[1][1.10.0.0.98] я хотел бы удалить все детали за исключением первой во второй скобке, или какой бы ни оценивают падения там, как я могу достигнуть этого? (т.е. я хотел бы только не учесть первое целое число во второй скобке),

0
задан 20 September 2013 в 15:15

2 ответа

Вы могли сделать что-то как

sed -r 's/\[([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\]/[XX.\2.XX.XX.XX]/'

который соответствует [ сопровождаемый последовательностью 5 разделенных от точки целых чисел, сопровождаемых ] и затем повторно заменяет 2-м (с XX маркировками удаленных - дополнительный, конечно). Использование -r опция делает выражение легче читать, но Вы могли переписать его в POSIX sed, если GNU sed не доступен. Путем изменения \2 к \1, \3, \4 и т.д. можно выбрать который число повторно занять место.

echo "atPhysAddress[1][1.10.0.0.98]" | sed -r 's/\[([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)\]/[XX.\2.XX.XX.XX]/'
atPhysAddress[1][XX.10.XX.XX.XX]
0
ответ дан 20 September 2013 в 15:15

Например, с

$ echo "atPhysAddress[1][1.10.0.0.98]" | sed 's/\(\[.*\]\)\[\(.\).*\]/\1[\2]/'
atPhysAddress[1][1]

Только получить первое число во второй скобке:

$ echo "atPhysAddress[1][12.10.0.0.98]" | sed 's/.*\]\[\([^.]*\).*\]/\1/'
12
0
ответ дан 20 September 2013 в 15:15

Другие вопросы по тегам:

Похожие вопросы: