首页 > 解决方案 > Linux shell:如何删除字符串中特定字符之前/之后的前导/尾随字符?

问题描述

案例场景:

$ var="This is my ___ va__riable ___for___ num_ber ___45___"
$ echo $var
This is my ___ va__riable ___for___ the num_ber ___45___

我想var进行转换,以便___N___ (3 个前导_、任意数字和 3 个尾随_)将变为 just N,即:只需留下数字。

所以结果var应该是:

This is my ___ va__riable ___for___ the num_ber 45

请注意,仅删除_ 围绕数字的 3 个连续的数字。剩下的就剩下了。

我怎么能这样做?

我的(弱)方法:

echo $var | sed 's/___[0-9]___/[0-9]/'

(我正在考虑sed用相同的数字替换数字的方法,但我不知道这是否可以用 来完成sed)。

标签: bashshellreplace

解决方案


$ echo "$var" | sed 's/___\([0-9][0-9]*\)___/\1/g'

您还可以使用扩展的正则表达式:

$ echo "$var" | sed -E 's/___([0-9]+)___/\1/g'

推荐阅读