管道的概念和一些用法 初步认识三剑客

第一章.管道

1.1 管道的概念

简单来说管道就是将前面命令处理的结果传递给后面的命令

管道的概念和一些用法 初步认识三剑客

1.2 管道与|xargs(管道xargs)的区别

find  |xargs ls -ld##把前一个命令的结果,通过管道传递给后面的命令(ls -ld),传递的是文件名

find  | 命令    ##把前一个命令的结果,通过管道传递给后面的命令,传递的是普通的文本,文字,字符串

第二章.find命令

1.1查找文件

涉及命令 find

创建模拟环境

touch  /root/oldboy.txt  /root/alex.txt /root/lidao.txt

1.2 在/root目录查找文件oldboy.txt

[[email protected] ~]# #find 在哪里找 -在哪找 f 找什么名字的 "oldboy.txt" 
[[email protected] ~]# find /root/ -type f -name "oldboy.txt"
/root/oldboy.txt
[[email protected]-50 ~]# 

-type  找什么类型的  f  file      (文件)
                     d  directory(目录)

1.3 在/root目录查找以 .txt 结尾的文件

  * 所有字符(文字)  任何文字

[[email protected] ~]# find /root/ -type f -name "*.txt"
/root/alex.txt
/root/lidao.txt
/root/oldboy.txt
[[email protected]-50 ~]# ###  *所有字符  任意字符
[[email protected] ~]#

1.4 实现查找并删除

1.4.1 方法一

为防止误删除 不直接用rm删除  先用 ls -l查看一下内容  确认一下  确认后再删除

[[email protected] ~]# find /root/ -type f -name "*.txt"|xargs ls -l   查找并查看
-rw-r--r--. 1 root root 0 Jul 10 19:42 /root/alex.txt
-rw-r--r--. 1 root root 0 Jul 10 19:42 /root/lidao.txt
-rw-r--r--. 1 root root 0 Jul 10 19:46 /root/oldboy.txt
[[email protected]-50 ~]# find /root/ -type f -name "*.txt"|xargs rm       查找并删除
[[email protected] ~]# ls -l /root/                                     检查是否删除
total 40
-rw-------. 1 root root  1161 Jul 10 18:26 anaconda-ks.cfg
-rw-r--r--. 1 root root 21736 Jul 10 18:26 install.log
-rw-r--r--. 1 root root  5890 Jul 10 18:25 install.log.syslog

1.4.2 方法二

因上面已删除 重新创建环境

touch  /root/oldboy.txt  /root/alex.txt /root/lidao.txt

首先为防止未删除 先查找并查看*.txt的文件

$

[[email protected] ~]# ls -l $(find /root/ -type f -name "*.txt")
-rw-r--r--. 1 root root 0 Jul 10 18:47 /root/alex.txt
-rw-r--r--. 1 root root 0 Jul 10 18:47 /root/lidao.txt
-rw-r--r--. 1 root root 0 Jul 10 18:47 /root/oldboy.txt

确认无误 rm -f 删除

[[email protected] ~]# rm -f $(find /root/ -type f -name "*.txt")     rm -f 强制删除不提示
[[email protected] ~]# ls /root/                                      检查是否删除
anaconda-ks.cfg  install.log  install.log.syslog
[[email protected]-50 ~]#

1.4.3 方法三

同上先模拟创建环境

先查看搜索出的内容 然后再删除

[[email protected] ~]# find /root/ -type f -name "*.txt" -exec ls -l {} \;  查看搜索的文件
-rw-r--r--. 1 root root 0 Jul 10 18:51 /root/alex.txt
-rw-r--r--. 1 root root 0 Jul 10 18:51 /root/lidao.txt
-rw-r--r--. 1 root root 0 Jul 10 18:51 /root/oldboy.txt
[[email protected]-50 ~]# find /root/ -type f -name "*.txt" -exec rm {} \;     删除搜索的文件
[[email protected] ~]# ls /root/                                            检查
anaconda-ks.cfg  install.log  install.log.syslog
[[email protected]-50 ~]#

第三章 过滤信息

问题信息

已知文件 test.txt 内容为:

test

liyao

oldboy oldboy

请给出输出test.txt 文件内容时,不包含 oldboy 字符串的命令

首先模拟环境

[[email protected] ~]# mkdir -p /data
[[email protected] ~]# cat > /data/test.txt <<EOF
test
liyao
oldboy
EOF

3.1 方法一 grep

grep    -v 清除搜索的内容 显示其他的

[[email protected] ~]# grep "oldboy" /data/test.txt 
oldboy
[[email protected]-50 ~]# grep -v "oldboy" /data/test.txt 
test
liyao

3.2 方法二 head  tail

head

head  默认显示文件的前几行内容  默认显示前十行

[[email protected] ~]# head -2 /data/test.txt    -2 == -n2  在此处表示的参数是一样的
test
liyao
[[email protected]-50 ~]# head -n2 /data/test.txt 
test
liyao
[[email protected]-50 ~]#

3.3 awk

! 表示取反

[[email protected] ~]# awk '!/oldboy/' /data/test.txt 
test
liyao
[[email protected]-50 ~]# awk '/oldboy/' /data/test.txt 
oldboy
[[email protected]-50 ~]#

3.4 sed

d 意思  delete

[[email protected] ~]# sed '/oldboy/d' /data/test.txt 
test
liyao

第四章 显示文件20到30行的内容

准备环境

[[email protected] ~]# seq 40 >/data/ett.txt

4.1 方法一 head | tail

[[email protected] ~]# head -30 /data/ett.txt |tail -11
20
21
22
23
24
25
26
27
28
29
30

4.2 方法二 awk

NR 行号

NR==20  取第三行  

[[email protected] ~]# awk 'NR==20,NR==30' /data/ett.txt
####因行数太多 此处不写  输出内容同4.1

4.3 方法三 sed

-n 取消默认输出(sed命令不会把文件内容都显示出来)

p (print显示打印)

[[email protected] ~]# sed -n '20,30p' /data/ett.txt 
####因行数太多 此处不写  输出内容同4.1