# Python 和 Perl 字符提取
在说shell 之前,我想有必要说一下其他语言的字符提取如python, perl
对于Python 来说,如果我想提取 “,” 左边的字符、:
#!/bin/python
a = "172.17.3.20"
# 截取“17”
# 这是把split作为a的一个子函数,可以调用,和Perl 和 shell 不同
b = a.split('.')[1]
对于 perl 来说,最简单的应该是:
#!/bin/perl
# 一定记得每次写之前要把字符串前面加 $,而且不要忘了加;
$a = "172.17.3.20";
# 与python 不同,$a是写在split后面的,意思是用split,先定义分隔符,然后定义要分割的对象
# 记住分割完后的是一个列表,所以用 @, 如果是$,返回的将会是列表中元素个数
@b = split(/\./,$a);
# 如果要输出 @b中间的东西用 foreach $s_ (@b) 来形容
# 和python 的“:”不同,perl 的函数需要括起来 {}
foreach $s_ (@b) {
# 这个和python 2一样,都可以用 "" 来表示
print "$s_";
}
好了,一些关于 python 和 perl 的皮毛知识已经讲完了,该说一下 shell 了
Shell 字符提取
对于 shell 来说, 字符提取一共分为一下几类
- 从左指定某个位置的字符出发开始提取
- 从右指定某个位置的字符出发开始提取
- 从左指定某个字符出发开始提取
- 从右指定某个字符出发开始提取
对了还有一点需要记住,不同于perl和python,shell在输入的时候不能有空格! 因为shell 本质上是在linux下的终端执行的,如果有空格会造成不必要的麻烦。
从左指定某个位置的字符出发开始提取
#!/bin/bash
a="172.20.3.18";
# 从左往右数第四个字符开始,到第8个(算上'.')
b=${ a:3:4};
echo $b;
要记得 是 写 在 外 面 的 , 相 似 的 表 达 有 很 多 , 比 如 是写在 {}外面的,相似的表达有很多,比如 是写在外面的,相似的表达有很多,比如{fun[@]}等。
还有 连接字符和截断信息的是 :
从右指定某个位置的字符出发开始提取
#!/bin/bash
a="172.20.3.18";
# 从右往左数第八个字符开始,到第三个(算上'.')
# .20.3
b=${ a:0-8:5};
echo $b;
意思是 0-n
从左指定某个字符出发开始提取
#!/bin/bash
a="172.20.3.18";
# 得到 第一个 2 以后右边的所有字符
b=${ a#*2};
# 得到 最后一个 2 以后的右边的所有字符
b=${ a##*2};
想象 $ 是中立的,相当于0,然后# 在 $ 左边,所以是从左向右,往右数
从右指定某个字符出发开始提取
那么同理,%是在$ 右边的,那就是从右往左推,这样就好记一点
凡是涉及 %的,一律在字符右边画”“,比如”${cnt%2}”
凡是涉及#的,一律在字符左边画星号,比如 ${cnt#*2}
#!/bin/bash
a="172.20.3.18";
# 从左往右得到 第最后一个 2 以后左边边的所有字符
# 172.
b=${ a%2*};
# 从左往右得到 第一个 2 以后的左边的所有字符
# 17
b=${ a%%2*};