[命令] Linux 命令 tail (打印文本的后几行)

案例一:使用 tail 命令显示文件的最后 10 行

# tail /etc/passwd

案例二:使用 tail 命令显示文件的最后 5 行

# tail -5 /etc/passwd

案例三:使用 tail 命令一直显示文件新增加的内容

# tail -f /etc/passwd

案例四:使用 tail 命令一直显示文件新增加的内容,并只显示最新的 5 行

# tail -n 5 -f /etc/passwd

[命令] Linux 命令 cut (打印文本的列) (转载)

cut命令

cut是一个选取命令,就是将一段数据经过分析取出我们想要的。
语法:Usage: cut OPTION... [FILE]...

选项:
-b,--bytes=LIST:仅显示行中指定直接范围的内容;
-c,--characters=LIST:仅显示行中指定范围的字符;
-d,--delimiter=DELIM:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f,--fields=LIST:显示指定字段的内容;
-n:与“-b”选项连用,不分割多字节字符;
--complement:选项提取指定字段之外的列;
--out-delimiter=<字段分隔符>:指定输出内容是的字段分割符;

补充扩展:
cut命令可以将一串字符作为列来显示,字符字段的记法:
N-:从第N个字节、字符、字段到结尾;
N-M:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;
-M:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。
上面是记法,结合下面选项将每个范围的字节、字符指定为字段:
-b 表示字节;
-c 表示字符;
-f 表示定义字段;

注:cut是竖着切(竖着分割)

[root@iZwz9bhan5nqzh979qokrkZ ~]# cat a.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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

实例一:

[root@iZwz9bhan5nqzh979qokrkZ ~]# cat a.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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

取出第一列
[root@iZwz9bhan5nqzh979qokrkZ ~]# cut -d ":" -f 1 a.txt 
root
bin
daemon
adm
lp

取出第一列和第三列
[root@iZwz9bhan5nqzh979qokrkZ ~]# cut -d ":" -f 1,3 a.txt 
root:0
bin:1
daemon:2
adm:3
lp:4

取出第一列至第三列
[root@iZwz9bhan5nqzh979qokrkZ ~]# cut -d ":" -f 1-3 a.txt 
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4

取出第四列和之前的所有列
[root@iZwz9bhan5nqzh979qokrkZ ~]# cut -d ":" -f -4  a.txt 
root:x:0:0
bin:x:1:1
daemon:x:2:2
adm:x:3:4
lp:x:4:7

取出第四列和之后的所有列
[root@iZwz9bhan5nqzh979qokrkZ ~]# cut -d ":" -f 4-  a.txt 
0:root:/root:/bin/bash
1:bin:/bin:/sbin/nologin
2:daemon:/sbin:/sbin/nologin
4:adm:/var/adm:/sbin/nologin
7:lp:/var/spool/lpd:/sbin/nologin

总结:
-d     分界符
-f 1-3 第1列至第3列
-f 1,3 第1列和第3列
-f -3  第3列和之前的内容
-f 3-  第3列号和之后的内容


实例二:

取出除第一列之外的所有列
[root@iZwz9bhan5nqzh979qokrkZ ~]# cut -d ":" -f 1 --complement a.txt 
x:0:0:root:/root:/bin/bash
x:1:1:bin:/bin:/sbin/nologin
x:2:2:daemon:/sbin:/sbin/nologin
x:3:4:adm:/var/adm:/sbin/nologin
x:4:7:lp:/var/spool/lpd:/sbin/nologin

取出除第一列和第三列之外的所有列
[root@iZwz9bhan5nqzh979qokrkZ ~]# cut -d ":" -f 1,3 --complement a.txt 
x:0:root:/root:/bin/bash
x:1:bin:/bin:/sbin/nologin
x:2:daemon:/sbin:/sbin/nologin
x:4:adm:/var/adm:/sbin/nologin
x:7:lp:/var/spool/lpd:/sbin/nologin


实例三:

打印第一个字符到第三个字符
[root@iZwz9bhan5nqzh979qokrkZ ~]# cut -c 1-3 a.txt 
roo
bin
dae
adm
lp:

打印前面两个字符
[root@iZwz9bhan5nqzh979qokrkZ ~]# cut -c -2 a.txt 
ro
bi
da
ad
lp

打印第五个字符及后面所有的字符
[root@iZwz9bhan5nqzh979qokrkZ ~]# cut -c 5- a.txt 
:x:0:0:root:/root:/bin/bash
x:1:1:bin:/bin:/sbin/nologin
on:x:2:2:daemon:/sbin:/sbin/nologin
x:3:4:adm:/var/adm:/sbin/nologin
:4:7:lp:/var/spool/lpd:/sbin/nologin
————————————————
版权声明:本文为CSDN博主「东城绝神」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37814112/java/article/details/80492032

注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来

CC 4.0 BY-SA 版权协议网址:https://creativecommons.org/licenses/by-sa/4.0/deed.z

[命令] Linux 命令 find (查找文件或目录)

内容目录:

内容一:find 格式

内容二:find 选项

内容三:find 参数
3.1 匹配名称的参数
3.2 匹配属性的参
3.3 匹配所有者的参数
3.4 匹配权限的参数
3.5 匹配时间的参数
3.6 匹配大小的参数
3.7 匹配目录的参数
3.8 匹配格式化方式的参数
3.9 逻辑匹配参数

内容四:find 的使用案例
4.1 案例一:匹配名称的参数
4.2 案例二:匹配属性的参
4.3 案例三:匹配所有者的参数
4.3.1 从当前目录开始查找所属主是 root 的文件和目录
4.3.2 从当前目录开始查找没有所属主和所属组的文件和目录
4.3.3 查找所有所属主是 natasha 的文件并将它们复制到 /root/findfiles 目录下
4.4 案例四:匹配权限的参数
4.4.1 从当前目录开始查找所有权限为 0777 的文件,并将其显示出来
4.4.2 从当前目录开始查找权限为 222 的文件
4.4.3 从当前目录开始查找有任何执行权限的文件和目录
4.4.4 查找所有包含特殊权限的文件和目录
4.5 案例五:匹配时间的参数
4.5.1 从当前目录开始查找 10 天内被修改过的文件
4.5.2 从 /var/log/mysql 目录开始查找在过去 3 天被修过的文件和目录,并在确认后将其删除
4.6 案例六:匹配大小的参数
4.6.1 从当前目录开始查找所有大小为 0 的文件,并将其显示出来
4.6.2 从当前目录开始查找所有大小为 0 的文件
4.7 案例七:匹配目录的参数
4.8 案例八:匹配格式化方式的参数
4.9 案例九:逻辑匹配参数
4.9.1 从当前目录开始查找以 “.txt” 结尾和以 “.dox” 结尾的文件
4.9.2 从当前目录开始查找权限不是 777 的文件
4.9.3 从当前目录开始查找权限为 2000 和 4000 的文件,并分析文件属性

具体的内容:

内容一:find 格式

# find <directory> <parameter> <parameter> ...... -print <-exec|-ok> <command|file> {<command>} \;

内容二:find 选项

1) 目录 指需要查找的目录
2) 参数 限制匹配的条件,可以有多个
3) -print 将匹配的结果进行标准输出
4) -exec 对匹配的结果执行后面的步骤
5) -ok 和 -exec 的作用相同,只不过每执行一步就需要用户确认一下
6) command 对匹配的结果执行命令
7) file 对匹配的结果进行文件种类分析,后面的 {} 里的命令必须为空
8) 命令 对匹配结果要执行的命令

(注意:<-exec|-ok> {} \;,这是一个固定格式,谁也不能被缺少。并且 {<命令>} 和 \ 之间有一个空格)

内容三:find 参数
3.1 匹配名称的参数

1) -name n 名称是 n 的文件或目录
2) -iname n 名称是 n 的文件或目录,并且忽略大小写
3) -lname n 名称是 n 的链接

(注意:在 3) 参数中,n 是被链接文件的名称而不是链接文件本身的名称)

3.2 匹配属性的参

-type n :文件类型是 n 的文件

(补充:这里的 n 可以是 d、f、l,它们分别代表目录、文件、链接)

3.3 匹配所有者的参数

1) -uid n 所属 gid 是 n 的文件或目录
2) -user n 所属主名称为 n 的文件或目录
3) -gid n 所属 gid 是 n 的文件或目录
4) -group n 所属组名称为 n 的文件或目录
5) -nouser 匹配无所属主的文件或目录
6) -nogroup 匹配无所属组的文件或目录

3.4 匹配权限的参数

1) -perm /u=n 所属主权限是 n 的文件或目录
2) -perm /u=n 所属组权限是 n 的文件或目录
3) -perm /o=n 所其他的权限是 n 的文件或目录

(补充:在以上 1) 到 3) 参数中 n 可以是 r、w、x 它们分别代表读权限、写权限、执行权限)

4) -perm -n 所属主、所属组、其他的权限是 n 的文件或目录

(补充:在 (4 参数中 n 是可以是 1、2、4)

5) -perm nnn 权限是 nnn 的文件或目录


补充:
在 5) 参数中:
n 是数字
第一个 n 是特殊权限
第二个 n 是所属主的权限
第三个 n 是所属组的权限
第四个 n 是其他的权限
例:600

6) -perm nnnn 权限是 nnnn 的文件或目录


补充:
在 6) 参数中:
n 是数字
第一个 n 是特殊权限
第二个 n 是所属主的权限
第三个 n 是所属组的权限
第四个 n 是其他的权限
例:0600

3.5 匹配时间的参数

1) -amin n 在过去 n 分钟内被读取过的文件或目录
2) -anewer file 比文件 file 更晚被读取过的文件或目录
3) -atime n 在过去 n 天内被读取过的文件或目录
4) -mmin n 在过去 n 分钟内被修改过内容的文件或目录
5) -mnewer file 比文件 file 更晚被修改过内容的文件或目录
6) -mtime n 在过去 n 天内被修改过内容的文件或目录
7) -cmin n 在过去 n 分钟内被修改过属性(比如新建)的文件或目录
8) -cnewer file 比文件 file 更晚被修改过属性(比如新建)的文件或目录
9) -ctime n 在过去 n 天内被修改过属性(比如新建)的文件或目录

(补充:在以上 1) 到 9) 参数中 n 是数字, +n 表示 n 以前,-n 表示 n 以内,n 表示第 n)

3.6 匹配大小的参数

1) -empty 为空的文件或目录
2) -size n 文件大小是 n 的文件或目录

(补充:在 2) 参数中 n 是数字, +n 表示比 n 大,-n 表示比 n 小,单位有 b、m、g 等)

3.7 匹配目录的参数

1) -path ‘n’ 路径名称符合 n 的文件或目录
2) -ipath ‘n’ 路径名称符合 n 的文件或目录,并且忽略大小写
3) -depth n 路径深度为 n 的文件或目录
4) -maxdepth n 最大路劲深度为 n 的文件或目录

(补充:在以上 1) 到 4) 参数中 n 是数字)

3.8 匹配格式化方式的参数

1) -fstype n 匹配硬盘格式为 n 文件或目录

(补充:1) 参数中 n 可以是 ext3、ext4、xfs 等硬盘格式)

2) -mount 是被挂载的文件或目录

3.9 逻辑匹配参数

1) -not 不匹配后面的参数,需要放在其他参数前面
2) ! 不匹配后面的参数,需要放在其他参数前面
3) -a 和,需要放在两个参数之前
4) -and 和,需要放在两个参数之前
5) -o 或,需要放在两个参数之前
6) -or 或,需要放在两个参数之前
7) <参数> ( <参数> n <参数> ) 指定将某两个参数作为一个整体和另一个逻辑参数进行匹配
8) <参数> -prune -n <参数> <参数> 指定某两个参数进行逻辑匹配

(补充:在以上 7) 到 8) 参数中 n 可以是 -a、-and、-o、-or 以上 3) 到 6) 参数)

内容四:find 的使用案例
4.1 案例一:匹配名称的参数

从当前目录开始查找以 txt 结尾的文件和目录

# find . -name "*\.txt"

4.2 案例二:匹配属性的参

从当前目录开始查找目录

# find . -type d

4.3 案例三:匹配所有者的参数
4.3.1 从当前目录开始查找所属主是 root 的文件和目录

# find . -user root

4.3.2 从当前目录开始查找没有所属主和所属组的文件和目录

# find . -nouser -o -nogroup

4.3.3 查找所有所属主是 natasha 的文件并将它们复制到 /root/findfiles 目录下

# find find / -user natasha -exec cp -rp {} /root/findfiles/ \;

4.4 案例四:匹配权限的参数
4.4.1 从当前目录开始查找所有权限为 0777 的文件,并将其显示出来

# find . -type f -perm 0777 -exec ls -l {}\;

4.4.2 从当前目录开始查找权限为 222 的文件

# find . -type f -perm -2

4.4.3 从当前目录开始查找有任何执行权限的文件和目录

# find . -perm /a=x

4.4.4 查找所有包含特殊权限的文件和目录

# find / -type f \( -perm -1000 -o -perm -2000 -o -perm -4000 \) -print

4.5 案例五:匹配时间的参数
4.5.1 从当前目录开始查找 10 天内被修改过的文件

# find . -ctime -10

4.5.2 从 /var/log/mysql 目录开始查找在过去 3 天被修过的文件和目录,并在确认后将其删除

# find /var/log/mysql -type f -mtime +3 -ok rm {}\;

4.6 案例六:匹配大小的参数
4.6.1 从当前目录开始查找所有大小为 0 的文件,并将其显示出来

# find . -type f -size 0 -exec ls -l {} \;

4.6.2 从当前目录开始查找所有大小为 0 的文件

# find . -type f -empty

4.7 案例七:匹配目录的参数

从 / 目录和 /proc/ 目录开始查找文件格式为 ext3 无所属主或所属组的文件和目录

# find / -path '/proc/*' -prune -o -fstype ext3 -nouser -o -nogroup

4.8 案例八:匹配格式化方式的参数

从 \ 目录开始查找以

# find . -type f

4.9 案例九:逻辑匹配参数
4.9.1 从当前目录开始查找以 “.txt” 结尾和以 “.dox” 结尾的文件

# find . -type f \( -name "*.txt" -or -name "*.dox" \)

4.9.2 从当前目录开始查找权限不是 777 的文件

# find . -type f ! -perm 777

4.9.3 从当前目录开始查找权限为 2000 和 4000 的文件,并分析文件属性

# find . -type f \( -perm -2000 -o -perm -4000 \) -exec file {} \;

[命令] Linux 命令 sed (修改和打印文本的行)

内容目录:

内容一:sed 格式

内容二:sed 选项

内容三:sed 的参数

内容四:sed 的使用案例
4.1 案例一:使用 p 参数打印某一行数据
4.1.1 在 test.txt 文本里打印第二行的数据
4.1.2 在 test.txt 文本里打印第二行到第四行的数据
4.1.3 在 test.txt 文本里打印最后一行的数据
4.1.4 在 test.txt 文本里打印包含 eternalcenter 的数据
4.1.5 在 test.txt 文本里打印以 eternalcenter 结尾的数据
4.1.6 在 test.txt 文本里输出总行数
4.1.7 在 test.txt 文本里输出奇数行
4.1.8 在 test.txt 文本里输出偶数行
4.2 案例二:使用 a 参数在某一行下面追加一行数据
4.2.1 在 test.txt 文本里在第二行下面追加一行 eternalcenter
4.2.2 在 test.txt 文本里在 abc 那一行下面添加一行 eternalcenter
4.2.3 在 test.txt 文本里在以 a 开头的行下面添加 eternalcenter
4.2.4 在 test.txt 文本里在以 [a] 开头的行下面添加 eternalcenter
4.2.5 在 test.txt 文本里最后一行下面添加 eternalcenter
4.3 案例三:使用 i 参数在某一行上面插入一行数据
4.3.1 在 test.txt 文本里在第二行上面插入一行 eternalcenter
4.3.2 在 test.txt 文本里在 abc 那一行上面添加一行 eternalcenter
4.3.3 在 test.txt 文本里在以 a 开头的行上面添加 eternalcenter
4.3.4 在 test.txt 文本里在以 [a] 开头的行上面添加 eternalcenter
4.3.5 在 test.txt 文本里最后一行上面添加 eternalcenter
4.4 案例四:使用 c 参数替换某一行数据
4.4.1 在 test.txt 文本里将第二行替换成 eternalcenter
4.4.2 在 test.txt 文本里将 abc 那一行替换成 eternalcenter
4.4.3 在 test.txt 文本里将以 a 开头的那一行替换成 eternalcenter
4.4.4 在 test.txt 文本里将以 [a] 开头的那一行替换成 eternalcenter
4.4.5 在 test.txt 文本里将以 eternalcentre 开头的那一行替换成 eternalcenter ALL=(ALL) NOPASSWD: ALL
4.5 案例五:使用 d 参数删除某一行
4.5.1 在 test.txt 文本里删除第二行
4.5.2 在 test.txt 文本里删除包含 abc 的那一行
4.5.3 在 test.txt 文本里删除以 a 开头的那一行
4.5.4 在 test.txt 文本里删除以 [a] 开头的那一行
4.5.5 在 test.txt 文本里删除第二行到第四行
4.6 案例六:使用 s 参数替换某一行某些数据
4.6.1 在 test.txt 文本里将所有行的第一个 eternalcentre 换成 eternalcenter
4.6.2 在 test.txt 文本里将所有行的所有 eternalcentre 换成 eternalcenter
4.6.3 在 test.txt 文本里将包含 eternalcentre 的行换成 eternalcenter
4.6.4 在 test.txt 文本里将第三行的第二个 eternalcentre 换成 eternalcenter
4.6.5 在 test.txt 文本里在所有行前面添加 eternalcenter
4.6.6 在 test.txt 文本里将第二行替换成 eternalcenter
4.6.7 在 test.txt 文本里将最后一行替换成 eternalcenter
4.6.8 在 test.txt 文中里将第二到第三行替换成 eternalcenter
4.6.9 在 test.txt 文本里将 eternalcenter 前面的数据和后面的数据对调位置
4.6.10 在 test.txt 文本里删除每行的第一个字符和最后一个字符
4.6.11 在 test.txt 文本里删除每行的第二个字符和最后一个字符
4.6.12 在 test.txt 文本里删除所有的数字和空格
4.6.13 在 test.txt 文本里将所有的大写字母都添加括号
4.6.14 在 test.txt 文本里给第七行和第九行前面添加 “#”
4.6.15 在 test.txt 文本里删除第一个空格
4.7 案例七:使用 h、H、g、G 参数复制和粘贴
4.7.1 sed 命令的工作原理
4.7.2 h、H、g、G、d、D 参数的讲解
4.7.2.1 h、H、g、G、d、D 参数的作用简介
4.7.2.2 h、H、g、G、d、D 的功能示意图
4.7.3 h、H、g、G、d、D 的使用案例
4.7.3.1 将第一行的数据添加到第三行后面
4.7.3.2 将第一行的数据替换第三行
4.7.3.3 将第一行和第二行的数据添加到第三行后面
4.7.3.4 将第一行和第二行的数据替换第三行
4.7.3.5 将第一个以 a 开头的行的数据添加到第三行后面
4.7.3.6 将第一个和第二个以 a 开头的行的数据添加到第三行后面
4.8 案例八:sed 一次匹配多个参数

具体的内容:

内容一:sed 格式

# sed <option> <parameter> <file>

内容二:sed 选项

1) -n 或 –quiet 或 –silent 仅显示处理后的内容,没处理的内容就不显示了
2) -i 实现数据的变更
3) -e <脚本> 或 –expression=<脚本> 以指定的脚本来处理输入的文本
4) -r 支持扩展正则
5) -f <脚本文件> 或 –file=<脚本文件> 以指定的脚本文件来处理输入的文本
6) -h 或 –help 显示帮助内容
7) -V 或 –version 显示版本信息

内容三:sed 的参数

1) p 打印某一行的数据
2) a 在某一行下面追加一行的数据
3) i 在某一行上面插入一行的数据
4) c 替换某一行的数据
5) d 删除某一行
6) s 替换某一行的某些数据
7) h、H、g、G 复制和粘贴某些行的数据

内容四:sed 的使用案例
4.1 案例一:使用 p 参数打印某一行数据
4.1.1 在 test.txt 文本里打印第二行的数据

# sed -n 2p test.txt

4.1.2 在 test.txt 文本里打印第二行到第四行的数据

# sed -n 2,4p test.txt

4.1.3 在 test.txt 文本里打印最后一行的数据

# sed -n '$p' test.txt

4.1.4 在 test.txt 文本里打印包含 eternalcenter 的数据

# sed -n '/eternalcenter/p' test.txt

4.1.5 在 test.txt 文本里打印以 eternalcenter 结尾的数据

# sed -n '/eternalcenter$/p' test.txt

4.1.6 在 test.txt 文本里输出总行数

# sed -n $= test.txt

4.1.7 在 test.txt 文本里输出奇数行

# sed -n 'p;n' test.txt

4.1.8 在 test.txt 文本里输出偶数行

# sed -n 'n;p' test.txt

4.2 案例二:使用 a 参数在某一行下面追加一行数据
4.2.1 在 test.txt 文本里在第二行下面追加一行 eternalcenter

# sed "2a eternalcenter" test.txt

4.2.2 在 test.txt 文本里在 abc 那一行下面添加一行 eternalcenter

# sed "/abc/a eternalcenter" test.txt

4.2.3 在 test.txt 文本里在以 a 开头的行下面添加 eternalcenter

# sed "/^a/a eternalcenter" test.txt

4.2.4 在 test.txt 文本里在以 [a] 开头的行下面添加 eternalcenter

# sed "/^\[a\]/a eternalcenter" test.txt

4.2.5 在 test.txt 文本里最后一行下面添加 eternalcenter

# sed "$a eternalcenter" test.txt

4.3 案例三:使用 i 参数在某一行上面插入一行数据
4.3.1 在 test.txt 文本里在第二行上面插入一行 eternalcenter

# sed "2i eternalcenter" test.txt

4.3.2 在 test.txt 文本里在 abc 那一行上面添加一行 eternalcenter

# sed "/abc/i eternalcenter" test.txt

4.3.3 在 test.txt 文本里在以 a 开头的行上面添加 eternalcenter

# sed "/^a/i eternalcenter" test.txt

4.3.4 在 test.txt 文本里在以 [a] 开头的行上面添加 eternalcenter

# sed "/^\[a\]/i eternalcenter" test.txt

4.3.5 在 test.txt 文本里最后一行上面添加 eternalcenter

# sed "$a eternalcenter" test.txt

4.4 案例四:使用 c 参数替换某一行数据
4.4.1 在 test.txt 文本里将第二行替换成 eternalcenter

# sed "2c\ eternalcenter" test.txt

或者:

# sed "2ceternalcenter" test.txt

4.4.2 在 test.txt 文本里将 abc 那一行替换成 eternalcenter

# sed "/abc/c\ eternalcenter" test.txt

或者:

# sed "/abc/ceternalcenter" test.txt

4.4.3 在 test.txt 文本里将以 a 开头的那一行替换成 eternalcenter

# sed "/^a/c\ eternalcenter" test.txt

或者:

# sed "/^a/ceternalcenter" test.txt

4.4.4 在 test.txt 文本里将以 [a] 开头的那一行替换成 eternalcenter

# sed "/^\[a\]/c\ eternalcenter" test.txt

或者:

# sed "/^\[a\]/ceternalcenter" test.txt

4.4.5 在 test.txt 文本里将以 eternalcentre 开头的那一行替换成 eternalcenter ALL=(ALL) NOPASSWD: ALL

# sed "/^eternalcentre/c\ eternalcenter\ ALL=\(ALL\)\ NOPASSWD:\ ALL" test.txt

或者:

# sed "/^eternalcentre/c\eternalcenter\ ALL=\(ALL\)\ NOPASSWD:\ ALL" test.txt

4.5 案例五:使用 d 参数删除某一行
4.5.1 在 test.txt 文本里删除第二行

# sed 2d test.txt

4.5.2 在 test.txt 文本里删除包含 abc 的那一行

# sed /"abc"/d test.txt

4.5.3 在 test.txt 文本里删除以 a 开头的那一行

# sed /"^a"/d test.txt

4.5.4 在 test.txt 文本里删除以 [a] 开头的那一行

# sed /"^\[a\]"/d test.txt

4.5.5 在 test.txt 文本里删除第二行到第四行

# sed '2,4d' test.txt

4.6 案例六:使用 s 参数替换某一行某些数据
4.6.1 在 test.txt 文本里将所有行的第一个 eternalcentre 换成 eternalcenter

# sed 's/eternalcentre/eternalcneter/' test.txt

4.6.2 在 test.txt 文本里将所有行的所有 eternalcentre 换成 eternalcenter

# sed 's/eternalcentre/eternalcneter/g' test.txt

4.6.3 在 test.txt 文本里将包含 eternalcentre 的行换成 eternalcenter

# sed 's/.*eternalcentre.*/eternalcneter/' test.txt

4.6.4 在 test.txt 文本里将第三行的第二个 eternalcentre 换成 eternalcenter

# sed '3s/eternalcentre/eternalcenter/2' 1.txt

4.6.5 在 test.txt 文本里在所有行前面添加 eternalcenter

# sed 's/^/eternalcenter/g' test.txt

4.6.6 在 test.txt 文本里将第二行替换成 eternalcenter

# sed '2s/.*/eternalcenter/' test.txt

4.6.7 在 test.txt 文本里将最后一行替换成 eternalcenter

# sed '$s/.*/eternalcenter/' test.txt

4.6.8 在 test.txt 文中里将第二到第三行替换成 eternalcenter

# sed '2,3s/.*/eternalcenter/' test.txt

4.6.9 在 test.txt 文本里将 eternalcenter 前面的数据和后面的数据对调位置

# sed "s/^\(.*\)\(eternalcenter\)\(.*\)$/\3\2\1/" test.txt

或者:

# sed -r "s/(.*)(eternalcenter)(.*)/\3\2\1/" test.txt

4.6.10 在 test.txt 文本里删除每行的第一个字符和最后一个字符

# sed 's/.//1;s/.$//' test.txt

4.6.11 在 test.txt 文本里删除每行的第二个字符和最后一个字符

# sed 's/.//2;s/.$//' test.txt

4.6.12 在 test.txt 文本里删除所有的数字和空格

# sed -r 's/[0-9]//g;s/^( )+//' test.txt

4.6.13 在 test.txt 文本里将所有的大写字母都添加括号

# sed 's/[A-Z]/(&)/g' test.txt

4.6.14 在 test.txt 文本里给第七行和第九行前面添加 “#”

# sed '7,9s/^/#/' test.txt

4.6.15 在 test.txt 文本里删除第一个空格

# sed -r 's/( )(.*)/\2/'

4.7 案例七:使用 h、H、g、G 参数复制和粘贴
4.7.1 sed 命令的工作原理

1) 从第一行开始一行一行地读取文本里的内容
2) 每读取一行就将数据存入到 pattern space 里面
3) 在 pattern sapce 中执行 sed 命令
4) 再打印 pattern space 中的内容然后将其清空
5) 之后重复以上操作再开始读取文本里的下一行
6) pattern space 里的数据可以存储到 hold space 里面


补充:
pattern space 相当于处理数据的流水线
hold space 相当于暂时存储数据的仓库

4.7.2 h、H、g、G、d、D 参数的讲解
4.7.2.1 h、H、g、G、d、D 参数的作用简介

1) g 将 hold space 中的内容拷贝到 pattern space 中,原来 pattern space 里的内容清除
2) G 将 hold space 中的内容 append 到 pattern space\n 后
3) h 将 pattern space 中的内容拷贝到 hold space 中,原来的 hold space 里的内容被清除
4) H 将 pattern space 中的内容 append 到 hold space\n 后
5) d 删除 pattern 中的所有行,并读入下一新行到 pattern 中
6) D 删除 multiline pattern 中的第一行,不读入下一行

4.7.2.2 h、H、g、G、d、D 的功能示意图

P H     P H     P H
1    h  1 1  d    1

P H     P H     P H     P H
2 1  G  2 1  H  2 1  d    1
        1       1 2       2
                  1       1

P H     P H     P H
3 2  G  3 2  h  3 3
  1     2 1     2 2
        1       1 1

P H     P H
3 2  g  2 2
  1     1 1


注意:
1) 这里的 P 指的是 pattern space
2) 这里的 H 指的是 hold space


补充:
h 其实就是清空现在粘贴板里的内容然后重新复制
H 其实就是不清空现在粘贴板里的内容然后再再原来粘贴版的内容基础上再追加复制
g 其实就是替换粘贴
G 其实就是追加粘贴

4.7.3 h、H、g、G、d、D 的使用案例
4.7.3.1 将第一行的数据添加到第三行后面

# sed -e '1h' -e '3G' test.txt

4.7.3.2 将第一行的数据替换第三行

# sed -e '1h' -e '3g' test.txt

4.7.3.3 将第一行和第二行的数据添加到第三行后面

# sed -e '1h' -e '2H' -e '3G' test.txt

4.7.3.4 将第一行和第二行的数据替换第三行

# sed -e '1h' -e '2H' -e '3g' test.txt

4.7.3.5 将第一个以 a 开头的行的数据添加到第三行后面

# sed -e '/^a/h' -e '3G' 1.txt

4.7.3.6 将第一个和第二个以 a 开头的行的数据添加到第三行后面

# sed -e '/^a/h' -e'/^a/H' -e '3G' 1.txt

4.8 案例八:sed 一次匹配多个参数

分别在 test.txt 文本里在 abc 和 bbb 那两行下面添加一行 eternalcenter

# sed -e "/abc/a eternalcenter" -e "/^bbb/a eternalcenter" test.txt

[命令] Linux 命令 grep (打印文本的行)

案例一:grep 使用正则表达式匹配

# grep -E '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
IPADDR=192.168.8.31
GATEWAY=192.168.8.55

或者:

# egrep '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
IPADDR=192.168.8.31
GATEWAY=192.168.8.55

案例二:grep 显示行号
2.1 grep 显示某些关键字所在行行号

# egrep -n '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
16:IPADDR=192.168.8.31
18:GATEWAY=192.168.8.55

2.2 grep 显示哪些行号是空行

# egrep -n ^$ /etc/resolv.conf

案例三:grep 取反匹配
3.1 grep 取反不匹配某些关键字

# egrep -v '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens192
UUID=5cda4d03-45c9-4856-80a6-f0bd0962d871
DEVICE=ens192
ONBOOT=yes
NETMASK=255.255.255.0
ZONE=public

3.2 grep 取反不显示空行

# egrep -v ^$ /etc/resolve.conf
### /etc/resolv.conf is a symlink to /var/run/netconfig/resolv.conf
### autogenerated by netconfig!
#
# Before you change this file manually, consider to define the
# static DNS configuration using the following variables in the
# /etc/sysconfig/network/config file:
#     NETCONFIG_DNS_STATIC_SEARCHLIST
#     NETCONFIG_DNS_STATIC_SERVERS
#     NETCONFIG_DNS_FORWARDER
# or disable DNS configuration updates via netconfig by setting:
#     NETCONFIG_DNS_POLICY=''
#
# See also the netconfig(8) manual page and other documentation.
#
### Call "netconfig update -f" to force adjusting of /etc/resolv.conf.
nameserver 192.168.0.1

案例四:grep 完全匹配

# egrep -o '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
192.168.8.31
192.168.8.55

案例五:grep 匹配区分大小写

# egrep -i '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
IPADDR=192.168.8.31
GATEWAY=192.168.8.55

案例六:grep 统计匹配成功次数

# egrep -c '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
2

案例七:grep 将匹配成功的部分自动添加颜色

# egrep --color=auto '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
IPADDR=192.168.8.31
GATEWAY=192.168.8.55

案例八:grep 将匹配成功的部分自动取消颜色

# egrep --color=no '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192  
IPADDR=192.168.8.31
GATEWAY=192.168.8.55

案例九:grep 一次匹配多个参数

# grep -e root -e zhumingyu /etc/passwd
root:x:0:0:root:/root:/bin/bash
zhumingyu:x:1001:1001:root:/root:/bin/bash