[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