# mount -t iso9660 -o,loop /root/CentOS.iso /mnt
(补充:这里的 CentOS.iso 是指的要挂载的镜像文件的名称,这里的 /mnt 指的是要挂载的目录)
# mount -t iso9660 -o,loop /root/CentOS.iso /mnt
(补充:这里的 CentOS.iso 是指的要挂载的镜像文件的名称,这里的 /mnt 指的是要挂载的目录)
纪念:站主于 2020 年 1 月完成了此开源实验,并将过程中的所有命令经过整理和注释以后,形成以下教程
服务端 192.168.1.20
客户端 192.168.1.21
1) 服务器提供 NFS 服务将自己的目录分享
2) 客户端挂载和使用 NFS 服务将服务端分享的目录挂载在自己的目录上
1) 所有服务器的系统都需要是 openSUSE 15.1 版本
2) 所有服务器都要关闭防火墙
3) 所有服务器系统都要配置好可用的软件源(最好是软件数量最多的官方版本)
4) 需要按照拓扑图给对应的服务器配置好 IP 地址和主机名
5) 所有服务器都要可以相互 ping 通自己和对方的 IP 地址和主机名
(分别在服务端和客户端上执行以下步骤)
# zypper install nfs-kernel-server
# zypper install nfs-client
(分别在服务端和客户端上执行以下步骤)
# systemctl enable rpcbind
# systemctl enable nfsserver
(分别在服务端和客户端上执行以下步骤)
# systemctl start rpcbind
# systemctl start nfsserver
(只在服务端上执行以下步骤)
# mkdir /nfsserver
(只在客户端上执行以下步骤)
# mkdir /nfsclient
(只在服务端上执行以下步骤)
# vi /etc/exports
添加以下内容:
......
/nfsserver 192.168.1.21(rw,no_root_squash,no_subtree_check)
(补充:这里的 192.168.1.21 是客户端的 IP 地址)
(只在服务端上执行以下步骤)
# exportfs -a
(只在客户端上执行以下步骤)
# vi /etc/fstab
添加以下内容:
......
192.168.1.20:/nfsserver /nfsclient nfs timeo=120,rw,soft,nolock 0 0
(只在客户端上执行以下步骤)
# mount -a
(只在客户端上执行以下步骤)
# df -h | grep 192.168.1.20
(补充:如果出现了类似 “192.168.1.20:/nfsserver 38G 5.5G 31G 16% /nfsclient”,则代表 NFS 搭建成功了)
linux使用parted进行分区
#将分区设置成gpt格式
parted /dev/sdc mklabel gpt
#创建一个20G的分区
parted /dev/sdc mkpart primary 0 20000
#将剩余的空间全部创建成一个扩展分区
parted /dev/sdc mkpart extended 1 100%
/dev/sdd分区分成1个分区
parted /dev/sdd mklabel gpt
parted /dev/sdd mkpart primary 0 100%
将硬盘分为两个主分区
[root@localhost ~]# parted /dev/sdb
GNU Parted 1.8.1 Using /dev/sdb Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) mklabel gpt # 将MBR磁盘格式化为GPT
(parted) print #打印当前分区
(parted) mkpart primary 0 4.5TB # 分一个4.5T的主分区
(parted) mkpart primary 4.5TB 12TB # 分一个7.5T的主分区
(parted) print #打印当前分区
(parted) quit 退出
————————————————
版权声明:本文为CSDN博主「随小风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sfdst/article/details/81167080
注明:所有转载内容皆直接从被转载文章网页的标题和内容的文本中复制而来
# find <directory> <parameter> <parameter> ...... -print <-exec|-ok> <command|file> {<command>} \;
1) 目录 指需要查找的目录
2) 参数 限制匹配的条件,可以有多个
3) -print 将匹配的结果进行标准输出
4) -exec 对匹配的结果执行后面的步骤
5) -ok 和 -exec 的作用相同,只不过每执行一步就需要用户确认一下
6) command 对匹配的结果执行命令
7) file 对匹配的结果进行文件种类分析,后面的 {} 里的命令必须为空
8) 命令 对匹配结果要执行的命令
(注意:<-exec|-ok> {} \;,这是一个固定格式,谁也不能被缺少。并且 {<命令>} 和 \ 之间有一个空格)
1) -name n 名称是 n 的文件或目录
2) -iname n 名称是 n 的文件或目录,并且忽略大小写
3) -lname n 名称是 n 的链接
(注意:在 3) 参数中,n 是被链接文件的名称而不是链接文件本身的名称)
-type n :文件类型是 n 的文件
(补充:这里的 n 可以是 d、f、l,它们分别代表目录、文件、链接)
1) -uid n 所属 gid 是 n 的文件或目录
2) -user n 所属主名称为 n 的文件或目录
3) -gid n 所属 gid 是 n 的文件或目录
4) -group n 所属组名称为 n 的文件或目录
5) -nouser 匹配无所属主的文件或目录
6) -nogroup 匹配无所属组的文件或目录
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
)
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)
1) -empty 为空的文件或目录
2) -size n 文件大小是 n 的文件或目录
(补充:在 2) 参数中 n 是数字, +n 表示比 n 大,-n 表示比 n 小,单位有 b、m、g 等)
1) -path ‘n’ 路径名称符合 n 的文件或目录
2) -ipath ‘n’ 路径名称符合 n 的文件或目录,并且忽略大小写
3) -depth n 路径深度为 n 的文件或目录
4) -maxdepth n 最大路劲深度为 n 的文件或目录
(补充:在以上 1) 到 4) 参数中 n 是数字)
1) -fstype n 匹配硬盘格式为 n 文件或目录
(补充:1) 参数中 n 可以是 ext3、ext4、xfs 等硬盘格式)
2) -mount 是被挂载的文件或目录
1) -not 不匹配后面的参数,需要放在其他参数前面
2) ! 不匹配后面的参数,需要放在其他参数前面
3) -a 和,需要放在两个参数之前
4) -and 和,需要放在两个参数之前
5) -o 或,需要放在两个参数之前
6) -or 或,需要放在两个参数之前
7) <parameter> ( <parameter> n <parameter> ) 指定将某两个参数作为一个整体和另一个逻辑参数进行匹配
8) <parameter> -prune -n <parameter> <parameter> 指定某两个参数进行逻辑匹配
(补充:在以上 7) 到 8) 参数中 n 可以是 -a、-and、-o、-or 以上 3) 到 6) 参数)
从当前目录开始查找以 txt 结尾的文件和目录
# find . -name "*\.txt"
从当前目录开始查找目录
# find . -type d
# find . -user root
# find . -nouser -o -nogroup
# find / -user natasha -exec cp -rp {} /root/findfiles/ \;
# find . -type f -perm 0777 -exec ls -l {}\;
# find . -type f -perm -2
# find . -perm /a=x
# find / -type f \( -perm -1000 -o -perm -2000 -o -perm -4000 \) -print
# find . -ctime -10
# find /var/log/mysql -type f -mtime +3 -ok rm {}\;
# find . -type f -size 0 -exec ls -l {} \;
# find . -type f -empty
从 / 目录和 /proc/ 目录开始查找文件格式为 ext3 无所属主或所属组的文件和目录
# find / -path '/proc/*' -prune -o -fstype ext3 -nouser -o -nogroup
从 \ 目录开始查找以
# find . -type f
# find . -type f \( -name "*.txt" -or -name "*.dox" \)
# find . -type f ! -perm 777
# find . -type f \( -perm -2000 -o -perm -4000 \) -exec file {} \;
1) 从第 1 行开始 1 行 1 行地读取文件里的内容
2) 每读取 1 行就将内容存入到 pattern space (模型空间) 里面
3) 在 pattern space (模型空间) 中执行 sed 命令
4) 再显示 pattern space (模型空间) 中的内容然后将其清空
5) 之后重复以上操作再开始读取文件里的下 1 行
6) pattern space (模型空间) 里的内容可以存储到 hold space 里面
# sed <option> <parameter> <file>
1) -n 或 –quiet 或 –silent 仅显示处理后的内容,没处理的内容就不显示了,也就是仅显示非标准输出的内容
2) -i 实现数据的变更
3) -e <script> 或 –expression=<script> 这样可以一次匹配多个参数
4) -r 支持扩展正则
5) -f <script file> 或 –file=<script file> 以指定的脚本文件来处理输入的文件
6) -h 或 –help 显示帮助内容
7) -V 或 –version 显示版本信息
(
补充:
1) pattern space (模型空间) 相当于处理内容的流水线
2) hold space (保持空间) 相当于暂时存储内容的仓库
)
1) p 先将每行的内容以标准输出的形式显示 1 遍,再将每行的内容以非标准输出的形式再显示 1 遍。不改变是否跳过下 1 行的属性,也就是如果前面有一个 N 参数,则跳过往下第 1 行接着执行往下第 2 行,如果前面没有任何参数,则直接执行往下第 1 行
2) P 先将每行的内容以非标准输出的形式再显示 1 遍,但是如果是 2 行组合在一起的话只显示第 1 行的内容,也就是只显示分行符 “/n” 之前的内容,再将每行的内容以标准输出的形式显示 1 遍。不改变是否跳过下 1 行的属性,也就是如果前面有一个 N 参数,则跳过往下第 1 行接着执行往下第 2 行,如果前面没有任何参数,则直接执行往下第 1 行
3) n 将每行的内容以标准输出的形式显示 1 遍,并提前读取下 1 行的内容,将下 1 行的内容覆盖当前行的 pattern space (模型空间),也就是下 1 行变成了当前行,再将当前行的内容以标准输出的形式显示一遍 (如果此时得到的内容是非标准的形式则不显示)。然后跳过往下第 1 行接着执行往下第 2 行。另外,如果往下 1 行不存在则直接停止所有命令,如果当前面的条件匹配时则放弃所有后面的命令
4) N 提前预读下 1 行,将下 1 行的内容添加到本行的 pattern space (模型空间) 后面,但是本行的内容和下 1 行的内容之间依旧存在分行符 “/n”,再将当前行的内容以标准输出的形式显示一遍。然后跳过下第 1 行接着执行往下第 2 行。另外,如果下 1 行不存在则以标准的形式显示当前 pattern space (模型空间) 里的内容并直接停止所有命令,如果当前面的条件不匹配时则放弃执行 N 命令直接执行后面的命令
5) = 以非标准输出的形式显示每 1 行是第几行,在行数后面以标准输出的形式显示行的内容
6) a 在某 1 行下面追加 1 行的内容
7) i 在某 1 行上面插入 1 行的内容
8) c 替换某 1 行的内容
9) g 将 hold space (保持空间) 中的内容拷贝到 pattern space (模型空间) 中,原来 pattern space (模型空间) 里的内容被清除
10) G 将 hold space (保持空间) 中的内容 append (添加) 到 pattern space (模型空间) 分行符 “/n” 后
11) h 将 pattern space (模型空间) 中的内容拷贝到 hold space (保持空间) 中,原来的 hold space (保持空间)里的内容被清除
12) H 将 pattern space (模型空间) 中的内容 append (添加) 到 hold space (保持空间) 分行符 “/n” 后
13) d 删除 pattern space (模型空间) 中的所有行,并执行下 1 行
14) D 删除 pattern space (模型空间) 中的第 1 行,也就是分行符 “/n” 之前的内容,如果删除后还有内容,则以此内容作为新的 1 行往下执行
15) s 替换某行的某些内容
16) y 替换某行的某些内容,和 s 的作用一样,但是功能没有 s 丰富
17) x 将当前 hold space (保持空间) 和 pattern space (模型空间) 内容互换,hold space (保持空间) 用来保存临时内容, pattern space (模型空间) 是本行的内容,注意 hold space (保持空间) 和 pattern space (模型空间) 的内容互换并不改变这些内容是第几行的,例如在 pattern space (模型空间) 里的内容是第 3 行的,则需要 3p
18) r 读取某一个文件里的内容
19) w 将内容写入一个文件
20) q 退出,前面可以跟退出的条件,后面可以跟退出代码
21) b 参数,设置标签分支,如果条件不成立,则对标签的位置进行跳转,如果标签省略了,则分支会一直到末尾
22) t 参数,设置标签分支,如果条件成立,则对标签的位置进行循环跳转,直到所有可进行的操作都完成后才停止,如果标签省略了则标签分支会一直到头部。在 t 和变迁之间的步骤是会循环执行的区域
(
注意:
1) 当多个参数进行组合时,多次标准输出最后会合并成只显示一次
2) 当多个参数进行组合时,当一个参数后面还有参数时,产生的最后一次显示不会直接显示而是传输给下一个参数进行处理,如果此次显示是非输出的形式,传递给下一个参数处理以后也会以非输出的形式显示
)
# sed -n 2p test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n 2,4p test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed 1!p test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n '$p' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
或者:
# sed 'N;D' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n '/eternalcenter/p' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n '/eternalcenter$/p' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n -e '/eternalcenter/{=;x;1!p;g;$!N;p;D;}' -e h test.txt
(
补充:
1) 当执行到包含 eternalcenter 内容的行时
2) 执行 /eternalcenter/ 判断当前包含 eternalcenter 内容则为真,如果为真,执行 = 参数,以非标准输出的形式传输每 1 行是第几行,在行数后面以标准输出的形式传输行的内容,此时这些内容存放在 pattern space (模型空间) 中并传输给 x 参数
3) 执行 x 参数,将当前 hold space (保持空间) 和 pattern space (模型空间) 内容互换,并传输给 p 参数。在执行 x 参数前 hold space (保持空间) 里的内容是由上一行执行 h 参数时保存的,所以执行 x 参数后 pattern space (模型空间) 的内容是上一行的内容。注意 hold space (保持空间) 和 pattern space (模型空间) 的内容互换并不改变这些内容是第几行的
4) 执行 1! 判断当前行不是第 1 行则为真,如果不是第 1 行,如果执行 p 参数,将此时 pattern space (模型空间) 的内容以标准输出的形式进行显示,再将 pattern space (模型空间) 的内容以非标准输出的形式传输给 g 参数
5) 执行 g 参数,将 hold space (保持空间) 中的内容拷贝到 pattern space (模型空间) 中,原来 pattern space (模型空间) 里的内容被清除,将此时的 pattern space (模型空间) 的内容传输给 N 参数
6) 执行 $! 判断当前行不是最后 1 行则为真,如果为真,执行 N 参数,将下一行的内容添加到本行内容的后面,但是两行之间存在分行符 “/n”,保存到 pattern space (模型空间),将此时的 pattern space (模型空间) 的内容以非标准输出的形式传输给 p 参数
7) 执行 p 参数,将 pattern space (模型空间) 里的内容以标准的形式显示,再将 pattern space (模型空间) 里的内容以非标准的形式传输给 D 参数
8) 执行 D 参数,删除 pattern space (模型空间) 中的第 1 行,也就是分行符 “/n” 之前的内容,并将此时 pattern space (模型空间) 里的内容传输给参数 h
9) 执行 h 参数,将 pattern space (模型空间) 中的内容拷贝到 hold space (保持空间) 中,原来的 hold space (保持空间)里的内容被清除
10) 这里的 test.txt 是要被 sed 操作的测试文件
)
# sed -n '/2000/,/2007/p' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
(注意:test.txt 里必须要有包含 2000 内容和 2007 内容的行此命令才会生效)
# sed -n '/2022-01-01 00:00:00/,/2022-02-22 00:00:00/p' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
(注意:test.txt 里必须要有包含 2022-01-01 00:00:00 内容和 2022-02-22 00:00:00 内容的行此命令才会生效)
# sed '/2019-01-01/,$' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
(注意:test.txt 里必须要有包含 2019-01-01 内容的行此命令才会生效)
# sed -n $= test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n '{=;1!p}' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n '{=;2!p}' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed = test.txt | sed 'N;s/\n/:/'
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n 'p;n' test.txt
(
补充:
1) 执行第 1 行,执行 p 参数,将第 1 行的内容以标准输出的形式进行显示,再将第 1 行的内容以非标准输出的形式传输给 n 参数,再执行 n 参数,将第 1 行的内容以标准输出的形式进行显示 (但是这里传输给 n 参数的内容已经是非标准的形式了,所以这里变为以非标准的形式进行显示),再将第 1 行的内容被第 2 行的内容覆盖,再将第 1 行的内容以标准输出的形式显示 1 遍 (但是这里传输给 n 参数的内容已经是非标准的形式了,所以这里不再进行显示),再跳过第 2 行再直接执行第 3 行。前面以标准输出的形式显示的内容被 -n 选项屏蔽
2) 执行第 3 行,执行 p 参数,将第 3 行的内容以标准输出的形式进行显示,再将第 3 行的内容以非标准输出的形式传输给 n 参数,再执行 n 参数,将第 3 行的内容以标准输出的形式进行显示 (但是这里传输给 n 参数的内容已经是非标准的形式了,所以这里变为以非标准的形式进行显示),再将第 3 行的内容被第 4 行的内容覆盖,再将第 1 行的内容以标准输出的形式显示 1 遍 (但是这里传输给 n 参数的内容已经是非标准的形式了,所以这里不再进行显示),再跳过第 4 行再直接执行第 5 行。前面以标准输出的形式显示的内容被 -n 选项屏蔽
3) 以此类推
4) 当执行到最后 1 行时,按照之前的逻辑,如果是奇数行则显示当前行的内容,如果是偶数行则跳过
5) 这里的 test.txt 是要被 sed 操作的测试文件
)
或者:
# sed -n '$!N;P' test.txt
(
补充:
1) $! 作用是判断当前行不是最后 1 行时执行后面的命令
2) 执行第 1 行,执行 $! 判断当前行不是最后 1 行则为真,第 1 行不是最后 1 行,执行 N 命令,将第 2 行的内容添加到第 1 行的内容的后面,但是第 1 行和第 2 行之间存在分行符 “/n”,再将当前行的内容以标准输出的形式传输给 P 参数,再执行 P 命令,将此时第 1 行的内容以标准输出的形式进行显示,再将分行符 “/n” 之前的所有内容 (也就是最早是第 1 行的内容) 以非标准输出的形式显示出来,并跳过第 2 行再直接执行第 3 行。前面以标准输出的形式显示的内容被 -n 选项屏蔽
3) 执行第 3 行,执行 $! 判断当前行不是最后 3 行则为真,第 3 行不是最后 1 行,执行 N 命令,将第 4 行的内容添加到第 3 行的内容的后面,但是第 3 行和第 4 行之间存在分行符 “/n”,再将当前行的内容以标准输出的形式传输给 P 参数,再执行 P 命令,将此时第 3 行的内容以标准输出的形式进行显示,再将分行符 “/n” 之前的所有内容 (也就是最早是第 3 行的内容) 以非标准输出的形式显示出来,并跳过第 3 行再直接执行第 4 行。前面以标准输出的形式显示的内容被 -n 选项屏蔽
4) 以此类推
5) 当执行到最后 1 行时,因为已经没有下 1 行了,所以停止命令
6) 这里的 test.txt 是要被 sed 操作的测试文件
)
或者:
# sed 'n;d' test.txt
(
补充:
1) 执行第 1 行,执行 n 参数,将第 1 行的内容以标准输出的形式进行显示,再将第 1 行的内容被第 2 行的内容替代,再将被替代的内容传输给 d 参数,再执行 d 参数将第 2 行的内容删除掉。并跳过第 2 行直接执行第 3 行
2) 执行第 3 行,执行 n 参数,将第 3 行的内容以标准输出的形式进行显示,再将第 3 行的内容被第 4 行的内容替代,再将被替代的内容传输给 d 参数,再执行 d 参数将第 4 行的内容删除掉。并跳过第 4 行直接执行第 5 行
3) 以此类推
4) 当执行到最后 1 行时,因为已经没有下 1 行了,所以停止命令
5) 这里的 test.txt 是要被 sed 操作的测试文件
)
# sed -n 'n;p' test.txt
(
补充:
1) 执行第 1 行,执行 n 参数,将第 1 行的内容以标准输出的形式进行显示,再将第 1 行的内容被第 2 行的内容替代,再将被替代的内容传输给 p 参数,再执行 p 参数,将第 2 行的内容以标准的形式显示,再将第 2 行的内容以非标准的形式显示。并跳过第 2 行再直接执行第 3 行。前面以标准输出的形式显示的内容被 -n 选项屏蔽
2) 执行第 3 行,执行 n 参数,将第 3 行的内容以标准输出的形式进行显示,再将第 3 行的内容被第 4 行的内容替代,再将被替代的内容传输给 p 参数,再执行 p 参数,将第 4 行的内容以标准的形式显示,再将第 4 行的内容以非标准的形式显示。并跳过第 4 行再直接执行第 5 行。前面以标准输出的形式显示的内容被 -n 选项屏蔽
3) 以此类推
4) 当执行到最后 1 行时,因为已经没有下 1 行了,所以停止命令
5) 这里的 test.txt 是要被 sed 操作的测试文件
)
# sed = test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n '/eternalcenter/=' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -n '/^$/=' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sort test.txt | sed '$!N;/^\(.*\)\n\1$/!P;D'
(
补充:
1) 执行 sort 将所有的行进行排序将相同的行排在一起,并结果输出给 sed
2) 执行第 1 行,执行 $! 判断当前行不是最后 1 行则为真,第 1 行不是最后 1 行,执行 N 参数,将第 2 行的内容添加到第 1 行的内容的后面,但是第 1 行和第 2 行之间存在分行符 “/n”,再将组合后的内容传输给 P 参数,再执行 /^(.*)\n\1$/! 判断当前行 \n 前面和后面不一样则为真,当为假时则直接不执行将内容传输给 D 参数,当为真时,执行 P 参数,先将第 1 行的内容以非标准输出的形式显示一遍,但是如果是 2 行组合在一起的话只显示第 1 行的内容,也就是只显示分行符 “/n” 之前的内容,再将第 1 行的内容以标准输出的形式传输给 D 参数,执行 D 参数,删除内容中的第 1 行,也就是分行符 “/n” 之前的内容,如果删除后还有内容,则以此内容作为新的 1 行往下执行第 2 行,如果删除后没有内容了,则跳过第 2 行直接执行第 3 行
3) 以此类推
4) 当执行到最后 1 行时,因为已经没有下 1 行了,所以停止命令
5) 这里的 test.txt 是要被 sed 操作的测试文件
)
# sed "2a eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "/abc/a eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "/^a/a eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "/^\[a\]/a eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "$a eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '/eternalcenter/a eternalcentre\nmingyuzhu\nzhumingyu' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "2i eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "/abc/i eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "/^a/i eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "/^\[a\]/i eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "$a eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "2c\ eternalcenter" test.txt
或者:
# sed "2ceternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "/abc/c\ eternalcenter" test.txt
或者:
# sed "/abc/ceternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "/^a/c\ eternalcenter" test.txt
或者:
# sed "/^a/ceternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "/^\[a\]/c\ eternalcenter" test.txt
或者:
# sed "/^\[a\]/ceternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "/^eternalcentre/c\ eternalcenter\ ALL=\(ALL\)\ NOPASSWD:\ ALL" test.txt
或者:
# sed "/^eternalcentre/c\eternalcenter\ ALL=\(ALL\)\ NOPASSWD:\ ALL" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed 2d test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed /"abc"/d test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed /"^a"/d test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed /"^\[a\]"/d test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '2,4d' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed 's/eternalcentre/eternalcneter/' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed 's/eternalcentre/eternalcneter/g' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed 's/.*eternalcentre.*/eternalcneter/' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '3s/eternalcentre/eternalcenter/2' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed 's/^/eternalcenter/g' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
或者:
# sed 's/^/eternalcenter&/g test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed 's/$/eternalcenter/g' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
或者:
# s/$/&eternalcenter/g' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '2s/.*/eternalcenter/' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '$s/.*/eternalcenter/' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '2,3s/.*/eternalcenter/' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed "s/^\(.*\)\(eternalcenter\)\(.*\)$/\3\2\1/" test.txt
或者:
# sed -r "s/(.*)(eternalcenter)(.*)/\3\2\1/" test.txt
或者:
# sed -r "s/(.*)((eternal)(center))(.*)/\5\2\1/" test.txt
(补充:这里以 (.*) 是 1,((eternal)(center)) 是 2,(eternal) 是 3,(center) 是 4,(.*) 是 5 为例,这里的 test.txt 是要被 sed 操作的测试文件)
# sed -r 's/.*/&\n/g;:a;s/(.*)(.)\n(.*)/\1\n\3\2/g;ta;s/^\n//g' test.txt
(
补充:
1) 执行 s/.*/&\n/g 在每行行尾添加换行符 “\n”
2) 执行 a 参数和 ta 参数,将从 :a 到 ta 之间的内容以后面的操作作为循环条件只要还能继续执行就一直循环,每次执行 s/(.*)(.)\n(.*)/\1\n\3\2/g,将此时所有行换行符 “\n” 之前的内容里最后一个字母移动到所有行换行符 “\n” 之后到内容里最后一个位置
3) 执行 s/^\n//g 删除所有行的换行符 “\n”
4) 这里的 test.txt 是要被 sed 操作的测试文件
)
或者:
# sed -r 's/.*/&\n/g;:b;s/(.*)(.)\n(.*)/\1\n\3\2/g;tb;s/^\n//g' test.txt
(
补充:
1) 执行 s/.*/&\n/g 在每行行尾添加换行符 “\n”
2) 执行 b 参数和 tb 参数,将从 :b 到 tb 之间的内容以后面的操作作为循环条件只要还能继续执行就一直循环,每次执行 s/(.*)(.)\n(.*)/\1\n\3\2/g,将此时所有行换行符 “\n” 之前的内容里最后一个字母移动到所有行换行符 “\n” 之后到内容里最后一个位置
3) 执行 s/^\n//g 删除所有行的换行符 “\n”
4) 这里的 test.txt 是要被 sed 操作的测试文件
)
# sed 's/.//1;s/.$//' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed 's/.//2;s/.$//' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -r 's/[0-9]//g;s/^( )+//g' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '/eternalcenter/N;s/.*\n//' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed 's/[A-Z]/(&)/g' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '7,9s/^/#/' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -r 's/( )(.*)/\2/'
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -r 's/^([A-Z]{1,})([a-z]{1,})([0-9]{1,})$/\1\2ok\3/' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -r 's/^([A-Z]{1,})([a-z]{1,})([0-9]{1,})$/\3 ok \1\2/' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -r 's/([0-9]{1,})\-([0-9]{1,})\-([0-9]{1,})/\1\2\3/' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# echo 20220222 | sed -r 's/(....)(..)(..)/\1 \2 \3/'
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '$!N;s/\n/ /' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '/\\$/N;s/\\\n/ /' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -e :a -e '/\\$/N;s/\\\n/ /; ta' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D' num.txt
(
补充:
1) 执行 :a 参数和 ta 参数,将从 :a 到 ta 之间的内容以后面的操作作为循环条件只要还能继续执行就一直循环,每次执行 $!N;s/\n=/ /,当不是最后 1 行时,将下 1 行的内容添加到本行后面,但是本行的内容和下 1 行的内容之间依旧存在分行符 “/n”,如果此时存在 \n=,则将其替换成空格,再将最后的结果以非标准输出的方式传输给 P 参数,执行 P 参数,将分行符 “/n” 之前的所有内容 (也就是最初此行的内容) 以非标准输出的形式显示,再将此时的所有内容以非标准输出的形式传输给 D 参数,执行 D 参数,删除前 1 行,也就是分行符 “/n” 之前的内容,如果删除后还有内容,则以此内容作为新的 1 行往下执行,否则跳过往下第 1 行接着执行往下第 2 行
2) 以此类推
3) 执行 s/^\n//g 删除所有行的换行符 “\n”
4) 这里的 test.txt 是要被 sed 操作的测试文件
)
# awk '{for(i=1;i<=NF;i++){if(i in arr){arr[i]=arr[i]" "$i}else{arr[i]=$i}}}END{for(i=1;i<=NF;i++){print arr[i]}}' test.txt | sort | sed -e :a -e '$!N;/^\(.....\).*\n\1.*/s/^\(.*\)\(\n\)\(.....\)\(.*\)/\1\4/g; ta'
(补充:这里的 test.txt 是要被 awk 操作的测试文件)
# awk '{for(i=1;i<=NF;i++){if(i in arr){arr[i]=arr[i]" "$i}else{arr[i]=$i}}}END{for(i=1;i<=NF;i++){print arr[i]}}' test.txt | sort | sed -e :a -e '$!N;/^\(.*\.com\).*\n\1.*/s/^\(.*\)\(\n\)\(.*\.com\)\(.*\)/\1\4/g; ta'
(补充:这里的 test.txt 是要被 awk 操作的测试文件)
# > awk '{for(i=1;i<=NF;i++){if(i in arr){arr[i]=arr[i]" "$i}else{arr[i]=$i}}}END{for(i=1;i<=NF;i++){print arr[i]}}' test.txt | sort | sed -e :a -e '$!N;/^\(.*\ \).*\n\1.*/s/^\(.*\)\(\n\)\(.*\ \)\(.*\)/\1 \4/g; ta'
(补充:这里的 test.txt 是要被 awk 操作的测试文件)
1) 从第 1 行开始 1 行 1 行地读取文件里的内容
2) 每读取 1 行就将内容存入到 pattern space (模型空间) 里面
3) 在 pattern space (模型空间) 中执行 sed 命令
4) 再显示 pattern space (模型空间) 中的内容然后将其清空
5) 之后重复以上操作再开始读取文件里的下 1 行
6) pattern space (模型空间) 里的内容可以存储到 hold space (保持空间) 里面
(
补充:
1) pattern space (模型空间) 相当于处理内容的流水线
2) hold space (保持空间) 相当于暂时存储内容的仓库
)
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 space (模型空间) 中的所有行,并执行下 1 行
6) D 删除 pattern space (模型空间) 中的第 1 行,也就是分行符 “/n” 之前的内容,如果删除后还有内容,则以此内容作为新的 1 行往下执行
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 (保持空间)
3) h 其实就是清空现在粘贴板里的内容然后重新复制
4) H 其实就是不清空现在粘贴板里的内容然后再再原来粘贴版的内容基础上再追加复制
5) g 其实就是替换粘贴
6) G 其实就是追加粘贴
)
# sed -e '1h' -e '3G' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -e '1h' -e '3g' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -e '1h' -e '2H' -e '3G' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -e '1h' -e '2H' -e '3g' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -e '/^a/h' -e '3G' 1.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed -e '/^a/h' -e'/^a/H' -e '3G' 1.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# echo "eternalcenter" | sed -r 'H;s/(.{7}).*/\1/;x;s/.*(.{6})$/\1/;x;G;s/\n/ /'
(
1) 执行 H 参数,将 pattern space (模型空间) 中的内容 append (添加) 到 hold space (保持空间) 分行符 “/n” 后,并将此时的 pattern space (模型空间) 传输给 s 参数
2) 执行 s/(.{7})./\1/,将 pattern space (模型空间) 中的内容只保留前 7 个字符,并将此时的 pattern space (模型空间) 传输给 x 参数 3) 执行 x 参数,将 hold space (保持空间) 和 pattern space (模型空间) 内容互换,,并将此时的 pattern space (模型空间) 传输给 s 参数 4) 执行 s/.(.{6})$/\1/,将 pattern space (模型空间) 中的内容只保留后 6 个字符,并将此时的 pattern space (模型空间) 传输给 x 参数
5) 执行 x 参数,将 hold space (保持空间) 和 pattern space (模型空间) 内容互换,,并将此时的 pattern space (模型空间) 传输给 G 参数
6) 执行 G 参数,将 hold space (保持空间) 中的内容 append (添加) 到 pattern space (模型空间) 分行符 “/n” 后,并将此时的 pattern space (模型空间) 传输给 s 参数
7) 执行 s/(.{7}).*/\1/,将 pattern space (模型空间) 中的内容删除换行符 “\n”
)
在 abc 和 bbb 那两行下面添加 1 行 eternalcenter
# sed -e "/abc/a eternalcenter" -e "/^bbb/a eternalcenter" test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '3r test2.txt' test1.txt
(补充:这里的 test1.txt 和 test2.txt 是要被 sed 操作的测试文件)
# sed '3w test2.txt' test1.txt
(补充:这里的 test1.txt 和 test2.txt 是要被 sed 操作的测试文件)
# sed '5 q' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '/eternalcenter/ q' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '3 q 3' test.txt
(补充:这里的 test.txt 是要被 sed 操作的测试文件)
# sed '{/eternalcenter/b lable;s/0/1/;:lable}' test.txt
(
补充:
1) 在这里 lable 是标签
2) 这里的 test.txt 是要被 sed 操作的测试文件
)
或者:
# sed '/eternalcenter/ba;s/0/1/;b;:a' test.txt
(
补充:
1) 在这里 a 是标签
2) 这里的 test.txt 是要被 sed 操作的测试文件
)
# sed '/eternalcenter/s/0/1/;t;s/0/2/' test.txt
(
补充:
1) 在这里的标签省略了,所以标签分支会一直到头部
2) 这里的 test.txt 是要被 sed 操作的测试文件
)
或者:
# sed -e :a -e '/eternalcenter/s/0/1/;ta;s/0/2/' test.txt
(
补充:
1) 在这里 a 是标签
2) 这里的 test.txt 是要被 sed 操作的测试文件
)