# mount -t iso9660 -o,loop /dev/sr0 /mnt
(补充:这里的 /dev/sr0 是光驱文件的名称,这里的 /mnt 指的是要挂载的目录)
# mount -t iso9660 -o,loop /dev/sr0 /mnt
(补充:这里的 /dev/sr0 是光驱文件的名称,这里的 /mnt 指的是要挂载的目录)
# mount -t iso9660 -o,loop /root/CentOS.iso /mnt
(补充:这里的 CentOS.iso 是指的要挂载的镜像文件的名称,这里的 /mnt 指的是要挂载的目录)
# 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> {} \;,这是一个固定格式,谁也不能被缺少。并且 {<命令>} 和 \ 之间有一个空格)
9) -xdev 不显示警告,只显示查找到的内容,这样显示起来简单美观
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) 参数)
# find . -name "*\.txt"
# find . -name "*\.txt" -not -name "test1.txt" -not -name "test2.txt"
# find /var/log -type f -not -name "wtmp" -not -name "btmp" -not -name "lastlog" -exec chmod o-rwx {} +
# find . -type d
# find /tmp/ -maxdepth 1 -type d -exec cp -p -f ./.htaccess.orig '{}'/.htaccess \;
# 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
# /usr/bin/find . -type f -perm /o=w -exec chmod o-w {} \;
# 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 {} \;
# find / -nouser -o -nogroup
1) 从第 1 行开始 1 行 1 行地读取文件里的内容
2) 每读取 1 行就将内容存入到 pattern space (模型空间) 里面,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) 当多个参数进行组合时,多次标准输出最后会合并成只显示 1 次
2) 当多个参数进行组合时,当 1 个参数后面还有参数时,产生的输出不会直接显示而是传输给下 1 个参数进行处理,如果此次显示是非输出的形式,传递给下 1 个参数处理以后也会以非输出的形式输出
)
# 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
或者:
# 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 '/^#/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 (模型空间) 里面,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”
)
# seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'
(
补充:
1) 执行 seq 9 命令,第 1 行输出 1,第 2 行输出 2,以此类推直到第 9 行,并将结果传输给 sed 命令
2) 执行 sed 的 H 参数,将 pattern space (模型空间) 中的内容 append (添加) 到 hold space (保持空间) 分行符 “/n” 后,并将此时的 pattern space (模型空间) 传输给 g 参数。当执行到第 1 行时,添加到 hold space (保持空间) 是 1,hold space (保持空间) 里的值是 \n1,当时执行到第 2 行时,添加到 hold space (保持空间) 是 2,hold space (保持空间) 里的值是 \n1\n2,依次类推
3) 执行 sed 的 g 参数,将 hold space (保持空间) 中的内容拷贝到 pattern space (模型空间) 中,原来 pattern space (模型空间) 里的内容被清除。当执行到第 1 行时,hold space (保持空间)里的值是 \n1,pattern space (模型空间) 里的值将是 \n1,显示的结果也会是 1,当执行到第 2 行时,hold space (保持空间)里的值是 \n1\n2,pattern space (模型空间) 里的值将是 \n1\n2,显示的结果也会是 \n1\n2,依次类推,并将结果传输给命令 awk
3) awk,将多行视为 1 行,会执行从 1 到此行列数次循环,变量 i 初始时的值为 1,每执行 1 次则变量 i 到值会加 1,每次循环时会显示:“此时变量 i 的值”*“此行的列数”=“此时变量 i 的值和此行的列数的乘积““当此时变量 i 的值等于此行的列数时则换行,否则的话则显示制表符的空格长度”。当执行到第 1 行时显示的是 1×1=1,当执行到第 2 行时显示的是 1×2=2 2×2=4,以此类推
)
在 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 操作的测试文件
)
# grep -P '^root' /etc/passwd
或者:
# grep --perl-regexp '^root' /etc/passwd
(补充:这里以匹配 /etc/passwd 文件中开头为 root 的行为例)
# grep -e '^root' /etc/passwd
或者:
# grep --regexp=PATTERN '^root' /etc/passwd
(补充:这里以匹配 /etc/passwd 文件中开头为 root 的行为例)
# grep -E '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
或者:
# grep --extended-regexp '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
或者:
# egrep '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行为例)
# egrep -n '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
或者:
# egrep --line-number '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
或者:
# egrep --line-buffered '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行并显示行号为例)
# egrep -n ^$ /etc/resolv.conf
或者:
# egrep --line-number ^$ /etc/resolv.conf
或者:
# egrep --line-buffered ^$ /etc/resolv.conf
(补充:这里以匹配 /etc/resolv.conf 里的空行并显示行号为例)
# egrep -v '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
或者:
# egrep --invert-match '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里不含有 IP 地址的行并显示行号为例)
# egrep -v ^$ /etc/resolve.conf
或者:
# egrep --invert-match ^$ /etc/resolve.conf
(补充:这里以匹配 /etc/resolve.conf 文件里不为空的行为例)
# grep '^[^#]' /etc/resolve.conf
(补充:这里以匹配 /etc/resolve.conf 文件里不以井号 “#” 开头的行为例)
# grep '^[^#| ]' /etc/resolve.conf
(补充:这里以匹配 /etc/resolve.conf 文件里不以井号 “#” 和空格 “ ” 开头的行为例)
# egrep -o '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
或者:
# egrep --only-matching '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 里的 IP 地址为例)
(注意:这里匹配后只显示 IP 地址,而不显示 IP 地址所在行里的其他内容)
# egrep -i '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
或者:
# egrep --ignore-case '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行并忽略大小写为例)
# egrep -c '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
或者:
# egrep --count '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行的数量为例)
# egrep --color=auto '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行并自动添加颜色为例)
# egrep --color=no '([1-9][0-9]{0,2}\.){3}[1-9][0-9]{0,2}' /etc/sysconfig/network-scripts/ifcfg-ens192
(补充:这里以匹配 /etc/sysconfig/network-scripts/ifcfg-ens192 文件里含有 IP 地址的行并取消自动添加颜色为例)
# grep -e root -e zhumingyu /etc/passwd
(补充:这里以匹配 /etc/passwd 文件中包含 root 或 zhumingyu 的行为例)
# grep -a 10 eternalcenter test.txt
或者:
# grep --text 10 eternalcenter test.txt
(补充:这里以匹配 test.txt 文件中包含 eternalcenter 的行并显示其前 10 行为例)
# grep -b 10 eternalcenter test.txt
或者:
# grep --byte-offset 10 eternalcenter test.txt
(补充:这里以匹配 test.txt 文件中包含 eternalcenter 的行并显示其后 10 行为例)
# grep -a -b 10 eternalcenter test.txt
或者:
# grep --text --byte-offset 10 eternalcenter test.txt
(补充:这里以匹配 test.txt 文件中包含 eternalcenter 的行并显示其前后 10 行为例)
# grep -q root /etc/passwd
或者:
# grep --quiet root /etc/passwd
或者:
# grep --silent root /etc/passwd
# echo $?
0
(
补充:
1) 这种方法主要用于在 Shell 脚本中,随后使用 if 判断判断匹配是否成功
2) 这里以匹配 /etc/passwd 中是否包含 root 用户为例
)