У меня есть следующее.
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.
Спасибо за помощь!
С ударом расширение Параметра :
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
Как Вы сказали, это - общая форма, Вы хотите удалить последние 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
Используя 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 или более цифр $
: соответствует концу строки /
: останавливается шаблон / запускает замещающую строку /
: останавливается замещающая строка / запускает модификаторы Используя 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
†“все элементы без последних двух элементов
Используя 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
, сопровождаемый .
и любое количество цифр в конце.