• [root@wuyike data]# cat >>wuyike.txt<<EOF

    > test

    > wuyike

    > student

    > EOF

  • head命令:取文件的前n行,默认是前10行,或用-n接数字 -n 3取前3行,可简写为-3

    [root@wuyike data]# head -2 wuyike.txt

    test

    wuyike


  • sed命令(scream editor):过滤器,sed -n '/过滤的内容/处理的命令' 文件。

    -n为取消sed的默认输出

    -i改变文件内容

    处理的命令:p print打印  d delete删除

    例子:

    [root@wuyike data]# sed -n '/wuyike/p' wuyike.txt

    wuyike

    [root@wuyike data]# sed '/wuyike/d' wuyike.txt

    test

    student

    [root@wuyike data]# sed '/wuyike/p' wuyike.txt

    test

    wuyike

    wuyike

    student

    [root@wuyike data]# sed -n '/wuyike/p' wuyike.txt

    wuyike

  • sed用于替换:*****

    例子:

    [root@wuyike ~]# echo wuyike >test.txt

    [root@wuyike ~]# echo wuyike >>test.txt

    [root@wuyike ~]# cat test.txt

    wuyike

    wuyike

  • [root@wuyike ~]# sed 's#wuyike#keke#g' test.txt             

    keke

    keke  →这种替换只改变输出,不替换内容

  • [root@wuyike ~]# cat test.txt

    wuyike

    wuyike

  • [root@wuyike ~]# sed -i 's#wuyike#keke#g' test.txt

  • [root@wuyike ~]# cat test.txt                     

    keke

    keke  →参数-i:替换内容

  • 其中#是是分隔符,可用/@=等代替。被替换的内容包含分隔符时尽可能换另一种作分隔符或转义。

  • s常说的查找并替换,用一个字符串替换成另一个。g(global)与s联合使用时,表示对当前全局匹配替换(与下一个g意义不同)

  • 一个题目:将每个文件夹中的test.txt中的wuyike替换成keke

  • [root@wuyike data]# tree

    .

    ├── a

    │   ├── ddd

    │   │   └── fff

    │   │       └── test.txt

    │   └── test.txt

    ├── b

    ├── c

    │   └── test.txt

    └── wuyike

  • [root@wuyike data]# find /root/data/ -type f -name "test.txt"

    /root/data/c/test.txt

    /root/data/a/ddd/fff/test.txt

    /root/data/a/test.txt

  • [root@wuyike data]# find /root/data/ -type f -name "test.txt"|xargs sed -i 's#wuyike#keke#g'

  • [root@wuyike data]# cat a/test.txt

    keke

    或:

  • [root@wuyike data]# find /root/data/ -type f -name "test.txt" -exec sed -i "s#keke#wuyike#g" {} \;

  • [root@wuyike data]# cat a/test.txt

    wuyike

    或:

  • [root@wuyike data]# sed -i "s#wuyike#keke#g" `find /root/data/ -type f -name "test.txt"`

  • [root@wuyike data]# cat a/test.txt

    keke

前两种是串行处理   后一种是并行处理




另一道常考题:

  • [root@wuyike ~]# seq 100 >test.txt

  • tail 尾巴,取文件的最后N行,默认最后10行,取最后三行:-n 3或-3

    [root@wuyike ~]# tail -3 test.txt

    98

    99

    100

  • -f:跟踪一个文件尾部的实时变化。

  • 只查看文件(共有100行)内第20到30行的内容:

    [root@wuyike ~]# head -30 test.txt |tail -11

    或:

    [root@wuyike ~]# sed -n '20,30p' test.txt

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30       (简单,易用法,高效)

  • grep命令:过滤器,把想要的和不想要的分离开。

    [root@wuyike data]# grep "wuyike" wuyike.txt  (想要wuyike)

    wuyike

    [root@wuyike data]# grep -v "wuyike" wuyike.txt  (参数-v:排除。不想要wuyike)

    test

    student

  • grep参数:

    -B除了显示匹配的一行之外,并显示该行之前的num行

    -A除了显示匹配的一行之外,并显示该行之后的num行

    -C除了显示匹配的一行之外,并显示之前后的各num行

    [root@wuyike ~]# grep 30 -B 10 test.txt

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

  • [root@wuyike ~]# grep 30 -A 10 test.txt 

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

  • [root@wuyike ~]# grep 25 -C 5 test.txt 

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30