从Bash变量中剥离字符

时间:2015-07-08 14:21:29

标签: bash

我正在尝试编写一个bash脚本(很差)并需要帮助从变量中剥离字符。

变量定义为$managementipmask= 111.111.111.111/24

我需要从变量的末尾去掉/ 24。

提前致谢。

2 个答案:

答案 0 :(得分:4)

使用参数展开功能删除第一个/

中的所有内容
$ k="111.111.111.111/24"
$ echo "${k%%/*}"
111.111.111.111

有关其他详细信息,请参阅有关参数扩展的资源:
http://mywiki.wooledge.org/BashGuide/Parameters#Parameter_Expansion

  

<强> $ {参数%图案}

     

'pattern'与'parameter'的结尾匹配。结果是   删除最短匹配的'参数'的扩展值。

     

<强> $ {参数%%图案}

     

如上所述,但删除了最长的匹配。

因此,您可以使用单个/删除上一个%

$ k="111.111.111.111/24/23"
$ echo "${k%/*}"
111.111.111.111/24

答案 1 :(得分:0)

另一种方式:

k="111.111.111.111/24"
echo "${k/%\/24/}"

它用空字符串替换最后/24

From Bash Manual:

  

$ {参数/模式/字符串}

     

扩展模式以生成与文件名扩展一样的模式。参数被扩展并且模式的最长匹配   反对其值被替换为字符串。如果模式以'/'开头,   模式的所有匹配都用字符串替换。通常只有   第一场比赛被替换。如果模式以'#'开头,则必须匹配at   参数扩展值的开头。如果模式开始   使用'%',它必须在参数的扩展值的末尾匹配。   如果string为null,则删除pattern的匹配项和/ following   模式可以省略。如果参数是'@'或'',则替换   操作依次应用于每个位置参数,并且   扩展是结果列表。如果参数是数组变量   使用'@'或''下标,替换操作适用于   依次是数组的每个成员,并且扩展是结果   列表。