1、单双引号
单引号:原样输出写的内容,没有变量和转义;
双引号:其中存在变量和转义;
说明
字符串串首的空格在显示时会被屏蔽,但是在统计长度和后续一系列有关字符串的方法时都会计入。
2、字符串拼接
用法:$a$b
例子
a="chuan" b="chuan" c=" $a$b" echo $c chuanchuan
3、字符串长度
用法:${#变量名}
例子:
a="chuan" b="chuan" c=" $a$b" echo $c echo ${#c}
11
4、切片
用法:${变量名:起:数}
说明:从起始位置(包含,从0开始)开始,截取指定数量的字符
例子:
c=" aabb" echo $c echo ${a:1:3} aab
注意这里,虽然串首的空格不会被显示,但是在统计时依然会计入
5、字符串运算符
运算符 |
说明 |
例子注意①[ ]与左右表达式之间的空格 ②表达式 与 运算符之间的空格 |
= | 两个字符串是否相等,是则返回true | [ $a = $b ] |
!= | 两个字符串是否相等,否则返回true | [ $a != $b ] |
-z | 字符串长是否为0,是则返回true | [ -z $a ] |
-n | 字符串长是否为0,否则返回true | [ -n $a ] |
str (无运算符) |
字符串是否为空,不为空则返回true | [ $a ] |
包含:~与!~,字符串是否包含子串
例子:字符串变量A是否包含子串abc?是返回1,否返回0
r=A~"abc" if(r==0)print "true" else print "false"
6、正则表达式
元字符 |
说明 |
例子 |
\ | 转义符,将特殊字符转为一般字符 | a\.b 只能匹配 a.b |
^ | 匹配开头 | ^tux 匹配以tux开头的行 |
$ | 匹配结尾 | tux$ 匹配以tux结尾的行 |
. | 除换行符\n外的任意单个字符 | ab.匹配任意ab+单字符 |
[ ] | 匹配[ ]中的任意单字符 |
coo[kl]匹配cook和cool |
[^] | 匹配除了[^ ]列出的单字符 | 123[^45]匹配123x,x是除了4和5外的其他任意字符 |
[-] | 匹配某个范围内的字符(必须递增) | [0-9]可以匹配0-9的任意单个数字 |
? | 匹配之前的项0或1次 | colou?r可以匹配0或1次u,即color或colour |
+ | 匹配之前的项1或多次 | sa-6+可以匹配多个6,即sa-6、sa-666 |
* | 匹配之前的项人一次 | co*l可以匹配任意个o,即col、cool、coool |
() | 匹配某个子串 | ma(trix)?可以匹配matrix和ma |
{n} | 匹配之前的项n次 | [0-9]{3}可以匹配任意三位数 |
{n,} | 至少匹配之前的项n次 | [0-9]{2,}匹配一个两位或以上的数 |
+n,m} | 最少匹配n次,最多匹配m次 | [0-9]{2,5}匹配一个2至5位数 |
| | 或 | ab(c|d)匹配c或d,即abc和abd均可 |
7、cut:列提取
用法
cut [选项] 文件名
选项
选项 |
说明 |
-f |
列号;提取第几列 多列用逗号,分隔,如cut -f 2,3 |
-d | 分隔符;以指定分隔符分割列 |
-n | 取消分割多字节字符 |
-c |
字符范围();不依赖分隔符来区分列,而是通过字符范围(从第几个字符开始分割)进行字符提取: n-:从第n个字符到行尾; n-m:从第n到第m个字符; -m:从第一个到第m个字符; |
--complement | 补全被选择的字符或字段 |
--out-delimiter | 输出内容为字段分隔符 |
说明:
- 默认分隔符为制表符,即TAB。
例子
-
创建文件
[root@localhost ~]$ vi student.txt id name gender mark 1 liming m 86 2 sc m 67 3 tg n 90
-
分割
[root@localhost ~]$ vi student.txt id name gender mark 1 liming m 86 2 sc m 67 3 tg n 90 [root@localhost ~]$ cut -f 2 student.txt #提取第二列内容 [root@localhost ~]$ cut -f 2,3 student.txt #提取第2和3列的内容
[root@localhost ~]$ cut -c 8- student.txt #每行从第八个字符开始提取到行尾,好像很乱啊,那是因为每行的字符个数不相等啊
8-:提取到行尾
8:提取第8个
-8:从行首提取到第8个 [root@localhost ~]$ cut -d ":" -f 1,3 /etc/passwd #以“:”作为分隔符,提取/etc/passwd_文件的第一列和第三列
8、split:字符串分割
用法:split(列,结果数组,分隔符)
例子:l=split($2,arr,"#")
说明:用指定分隔符对某列所有字符串进行分割,分割结果保存于结果数组中
参数:
- $2:对哪一列进行分割;
- arr:分割后保存而成的字符串数组;
- "#":分隔符;写法:"分隔符",如"/",":","#"
返回值:分割成的数组长度,arr的长度,可通过arr[l]访问最后一号元素
例子:
/etc/passwd的文件组织形式如下
将文件的最后一列进行分割(/sbin/nologin),提取分割后的最后一个元素
l=split($7,arr,"/") canlogin=arr[l]~"nologin" if(canlogin==0)canlogin="true" else canlogin="false"
标签:字符,分割,Shell,匹配,cut,分隔符,字符串 From: https://www.cnblogs.com/ShineLeBlog/p/17561946.html