sed 删除最后 2 个数字

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。
感谢您的帮助!

答案1

使用 bash 的参数扩展

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

答案2

正如您所说,这是一种通用形式,您想要从文本(.0.xxx)中删除最后 6 个字符,因此您可以使用以下命令:

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}"

另一种解决方案是使用 cut 和 '.' 作为分隔符

echo $oid | cut -d '.' -f -10

答案3

使用sed

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

-rsed解释ERE(扩展正则表达式)模式

sed命令分解:

  • s:断言执行替换
  • /:开始模式
  • \.: 匹配一个.字符
  • 0: 匹配一个0字符
  • \.: 匹配一个.字符
  • [0-9]+:匹配 1 个或多个数字
  • $: 匹配行尾
  • /:停止模式/开始替换字符串
  • /:停止替换字符串/启动修饰符

答案4

使用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、 之后的所有字符.以及末尾的任意数量的数字。

相关内容