当前位置:网站首页>[轻松学会shell编程]-4、单引号和双引号的区别、整形数值的运算、shell中数组定义和sed的详细用法

[轻松学会shell编程]-4、单引号和双引号的区别、整形数值的运算、shell中数组定义和sed的详细用法

2022-06-22 16:52:00 FanMY_71

 1、单引号和双引号的区别

单引号所见即所得

2、整形数值的运算:

[[email protected] ~]# a=10
[[email protected] ~]# b=20
[[email protected] ~]# echo $(($a+$b))
30
[[email protected] ~]# echo $[$a+$b]
30

# 使用expr
[[email protected] ~]# expr $a+$b
10+20
[[email protected] ~]# expr $a + $b
30

浮点型的话,就是用bc

3、shell中的数组

定义:使用圆括号、中间以空格作为分隔符

[[email protected] case]# a=(xx yy zz ff)
[[email protected] case]# echo $a
xx
[[email protected] case]# echo ${a[*]}
xx yy zz ff
[[email protected] case]# echo ${a[@]}
xx yy zz ff
[[email protected] case]# echo ${a[@]:1:3}
yy zz ff
[[email protected] case]# echo ${#a[@]}
4
[[email protected] case]# a[3]='hh'
[[email protected] case]# unset a[2]
[[email protected] case]# echo ${!a[@]}
0 1 3

4、sed

sed是一种支持正则表达式的非交互式流编辑器(stream editor)。Linux系统中的sed命令主要是利用script来处理文件的。

  • 内存中关于sed有两个空间:patterrn space(模式空间;加工车间)和hold space(保留空间;临时仓库)
  • 两个空间可以互相访问的。
  • 一般保留空间不使用,只是用模式空间。模式空间处理完一行,就会清空并且输出到屏幕上。然后进行下一行操作。若是你想要保留这一行,你可以把它放进保留空间。

模式空间的概念

模式空间:sed工具从文件读取一行文本然后存入的缓冲区,然后命令操作模式空间的内容,在初始状态下模式空间是没有内容的,在每次循环读取数据的过程中,模式空间都会被清空并写入新的内容(这里补充一点,sed命令操作就是 “模式空间” 而不是内存,这就是为什么sed不会改变原文件内容的原因,如果想改变原文件内容需要加-i选项)

sed工具的执行流程图

命令n的工作流程图

清空当前模式空间,然后读入下一行(如果sed语句遇到n命令会改变正常的执行流程),执行流程如下:
 

4.1、sed的语法命令格式和常用选项

命令格式

一般只用到前面两种语法。 

 常用选项

sed查找方式

  1. 根据行号
  2. 根据模式--》正则表达式=字符+特殊符号
  3. 根据字符串 

4.1.1、sed的常用编辑命令

4.1.2、sed的p命令示例

[[email protected] rough_book]# sed -n '3,5p' passwd 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

# -n,抑制模式空间的自动打印,即仅显示script处理后的结果。若是没有这个 -n,会输出整个"passwd"文件,且3到5行会输出两遍。因为3到5行刚好符合我们设置的条件,所以会在patter space中逗留,处理完之后又会输出一遍,所以就会造成出现输出两遍。
# 这样看的清楚一些
[[email protected] rough_book]# cat passwd -n |sed -n '3,5p' 
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • sed -n '10p' passwd   显示第10行
  • sed -n '$p' passwd     显示最后一行
  • sed -n '2+2p' passwd   显示2,3,4行
  • sed -n '10,30!p' passwd   显示出了10到30的行
  • sed -n '2 ~2p' passwd   显示双数行。从2开始步长为2开始取。

4.1.3、sed -n '/模式/p'  输入文件

  • 这里的模式可以是正则表达式也可以是精确字符
  • 模式用/括起,扩展正则要加-r选项
[[email protected] rough_book]# sed -n '/bash$/p' passwd 

# 这里面^也可以使用

使用扩展正则

[[email protected] rough_book]# sed -nr '/^fan|^zhao/p' passwd 
fan1:x:7800:7803::/home/fan1:/bin/bash
fan2:x:7801:7804::/home/fan2:/bin/bash
zhaoliying1:x:7802:7805::/home/zhaoliying1:/bin/bash

使用转义字符

[[email protected] rough_book]# df -h|sed -n '/\/$/p'
/dev/mapper/centos-root   17G  3.2G   14G   19% /

4.2、sed里单引号和双引号的区别

  • 双引号里可以使用shell里的变量
[[email protected] rough_book]# a=5
[[email protected] rough_book]# b=10
[[email protected] rough_book]# cat -n passwd |sed -n "${a},${b}p"
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10	operator:x:11:0:operator:/root:/sbin/nologin
  • 单引号不行
  • 单引号和双引号里都可以存放模式

原网站

版权声明
本文为[FanMY_71]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_48638643/article/details/125338956