Shell(3):字符串

1、单双引号

单引号:原样输出写的内容,没有变量和转义;

双引号:其中存在变量转义;

 

说明

字符串串首空格显示时会被屏蔽,但是在统计长度后续一系列有关字符串的方法时都会计入

2、字符串拼接

用法:$a$b

例子

复制代码
a="chuan"
b="chuan"
c=" $a$b"
d="$a""chuan"
e=$a"chuan"
#cde都代表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"

 

 

posted @   ShineLe  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示