-v排除掉目标内容后再 | xargs 将内容传递给rm命令进行删除
方法三:命令嵌套命令
此方法只适用于删除当前目录下的内容
··符号(tab键上边的~符号不按shift输入就是)它的意思是取符号内的命令的执行结果。本方法的意思就是rm删除掉··符号内的命令的执行结果的内容
2.9 退出到上级目录删除data目录
cd /root/data 进入目录
cd .. 退出当前目录回到上一级目录
find 找出目标data目录
| xargs 传递给rm删除
特殊符号
“.”(点):表示当前目录/路径
“..”:表示当前目录的上级目录
“#” :表示注释(linux会无视,略过)
2.10 已知chensiqi.txt文件内容,去掉某行内容后,输出结果
方法一:grep过滤
grep 过滤(默认)
cat chensiqi.txt | grep "I am chensiqi" 只看过滤的内容
-v: 排除
cat chensiqi.txt | grep -v "I am chensiqi" 排除内容后,看其他内容
方法二:通过head和tail拼接字符串
head:从头开始查看文件内容,默认查看10行
tail:从结尾开始查看文件,默认查看10行
-n: n等于行数
&& :特殊符号,并且的意思,可以拼接字符串结果
方法三:awk 解决
!:取反
方法四:sed 解决
了解就好,以后再细说
/内容/d (删除)
找到内容后,将内容删除后再输出
2.11 请用一条命令完成创建目录/chensiqi/test,即创建/chensiqi 目录及/chensiqi/test
2.12 已知/chensiqi 目录下已经存在test.txt 文件,如何执行命令才能把/mnt/test.txt 拷贝到/tmp 下覆盖掉/chensiqi/test.txt.而让系统不提示是否覆盖(root权限)
/bin/cp:是复制命令的绝对路径,通过绝对路径来复制命令就不会有提示。
知识扩展
还记得我们的crond定时任务吗,当用定时任务触发脚本的时候,一般都要求脚本里的命令是绝对路径的书写方式(还不知道定时任务的,此处略过)
2.13 只查看ett.txt(共100行)内第20到第30行内容
方法一:head和tail通过管道符解决
head -30 文件路径:查看目标文件前30行
tail -10 文件路径:查看目标文件后10行
head -30 文件名 | tail -10 先查看目标文件前30行,再查看前30行内容的最后10行。
方法二:sed解决
sed ‘’ 目标文件名:默认输出,全部内容
sed -n “行数p” 文件名:读取目标文件的行数内容
sed -n "行数,行数p" 文件名:读取目标文件的行数范围的内容
方法三:awk解决
awk '行数' 目标文件名、
NR == 行数
&& 并且拼接字符串
知识扩展
grep命令在这里无法解决该问题,grep命令主要是用来过滤内容的。而不能按行或者按列数来检索。
grep -v :取反,排除
grep -A 10:(after) 显示匹配行的后10行
grep -B 10:(before) 显示匹配行的前10行
grep -C 5:显示匹配的行的前后各5行
2.14 把/chensiqi目录及子目录下所有以扩展名.sh 结尾的文件,文件中包含 chensiqi的字符串全部替换为welcome
此题可通过find先找出目标文件
再用sed -i 直接对文件内容进行修改
sed -i 需要接收的是文件名,而“|”传递的是字符串,“| xargs”传递的才是文件名,如果不理解请继续往后看,
2.15 讨论
管道符 | 和管道命令 xargs的区别
- | 传递文本,文字,字符串
- | xargs 文字,文本,字符串==(变成)=>文件名
grep 过滤的是文件的内容,它过滤的是字符串,因此它天生就认识 管道符“|”
sed -i “s///g” 文件名:他后边需要接的是文件的名字,因此他不能直接认识字符串
所以就需要通过xargs这个管道符命令来将字符串转换成文件名
综上,这就是“|”和“|xargs”的区别,请仔细理解,很重要