sed удаляют последние 2 цифры

У меня есть следующее.

oid=.1.3.6.1.4.1.795.2.5.0.xxx (these 0.xxx represent any random numeral)

Я хочу сделать следующее

echo $oid | sed (some commands to remove 0.xxx)

и сохраните получившую строку

.1.3.6.1.4.1.795.2.5

в oid.

Я не возражаю против того, чтобы это было сделанным с Grep, awk или sed ничто.
Все прежде 0.xxx может измениться, только статичная вещь будет 0.
Спасибо за помощь!

3
задан 15 June 2015 в 14:08

5 ответов

С ударом расширение Параметра :

oid=".1.3.6.1.4.1.795.2.5.0.xxx"
oid="${oid%.0.*}"
echo "$oid"

Вывод:

.1.3.6.1.4.1.795.2.5
8
ответ дан 1 December 2019 в 12:56

Как Вы сказали, это - общая форма, Вы хотите удалить последние 6 символов из своего текста (.0.xxx), таким образом, можно использовать это:

echo ".1.3.6.1.4.1.795.2.5.0.xxx" |sed 's/.\{6\}$//'

Тогда, если Вы хотите использование с переменными:

oid=.1.3.6.1.4.1.795.2.5.0.xxx

Тогда:

echo $oid | sed 's/.\{6\}$//'

вывод:

.1.3.6.1.4.1.795.2.5

Другое решение

echo "${oid:0:${#oid}-6}"

Другое сокращение использования решения и'.' как разделитель

echo $oid | cut -d '.' -f -10
4
ответ дан 1 December 2019 в 12:56

Используя sed:

oid="$(echo -n .1.3.6.1.4.1.795.2.5.0.0 | sed -r 's/\.0\.[0-9]+$//')"

-r: делает sed, интерпретируют ERE (Расширенные регулярные выражения) шаблоны

sed разбивка команды:

  • s: утверждает для выполнения замены
  • /: запускает шаблон
  • \.: соответствует . символ
  • 0: соответствует 0 символ
  • \.: соответствует . символ
  • [0-9]+: соответствия 1 или более цифр
  • $: соответствует концу строки
  • /: останавливается шаблон / запускает замещающую строку
  • /: останавливается замещающая строка / запускает модификаторы
4
ответ дан 1 December 2019 в 12:56

Используя awk

oid=".1.3.6.1.4.1.795.2.5.0.xxx"
awk -F'.' '{for (i=2;i<=NF-2;i++) {printf "%s","."$i} }' <<< "$oid"

или все в одном

awk -F'.' '{for (i=2;i<=NF-2;i++) {printf "%s","."$i} }' <<< ".1.3.6.1.4.1.795.2.5.0.xxx"

Вывод

.1.3.6.1.4.1.795.2.5

Короткое объяснение

NF-2 †“все элементы без последних двух элементов

1
ответ дан 1 December 2019 в 12:56

Используя grep:

grep -Po '.*(?=\.0\.\d+$)'

Тест:

$ oid='.1.3.6.1.4.1.795.2.5.0.908'

$ oid="$(grep -Po '.*(?=\.0\.\d+$)' <<<"$oid")"

$ echo "$oid"
.1.3.6.1.4.1.795.2.5
  • grep -P позволит нам использовать PCRE

  • grep -o, произведет только подобранную часть

  • .*(?=\.0\.\d+$), будет соответствовать всем символам до .0, сопровождаемый . и любое количество цифр в конце.

1
ответ дан 1 December 2019 в 12:56

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

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