Linux基础篇(9)小白如何学习Linux?文件管理之三剑客命令初级(中)

前言小文章

《你不去试一试,怎么知道》

有人问我 你怎么找到工作的 你怎么申请学校的 你怎么拿奖学金 怎么交朋友 怎么爱人。这么多问题 我无法一个一个回答。或许我也和你一样 只是一个在人生旅途的行者。可是有一 点 我不会去问 我回去自己找答案。错了 怕什么 因为年轻 我还有时间 还有时间去犯错 去面壁 在咀嚼伤口的时候 相信下一次会做得更好!

有时候你要知道世界很大 可是有时它也很小 当你足够自信 勇敢 自己就可以成为一支队伍 向前。如果你总是胆怯 犹豫 思考着付出与回报 你会错过人生多少风景。
你不去试一试 又怎么知道!

一、三剑客命令初识别

1.1 Sed命令介绍

流式编辑器 主要擅长对文件的编辑操作 我们可以事先定制好编辑文件的指令 然后让sed自动完成对文件的整体编辑

> 用法

sed 选项 '定位+命令' 文件路径

> 选项

-n 取消默认输出
-r 支持扩展正则元字符(由于尚未学习正则,所以此处暂作了解)
-i 立即编辑文

> 定位

行定位:
1定位到第一行
1,3代表从第1行到第3行
不写定位代表定位所有行
正则表达式定位:
/boke/ 包含boke的行
/^boke/ 以boke开头的行
/boke$/以boke结尾的行
数字+正则表达式定位
"1,8p"代表打印1到8行,
"1,/boke/p"则代表取从第1行到首次匹配到/boke/的行

用法示例:p与d

[root@localhost ~]# sed '' a.txt
boke1111
22222boke
3333boke33333
4444xxx44444
5555xxx55555xxxx555xxx
6666boke6666boke666boke
[root@localhost ~]# sed -n '' a.txt
[root@localhost ~]#
[root@localhost ~]# sed -n '1,/xxx/p' a.txt
boke1111
22222boke
3333boke33333
4444xxx44444
[root@localhost ~]# sed '1,/xxx/d' a.txt
5555xxx55555xxxx555xxx
6666boke6666boke666boke
[root@localhost ~]# sed '1d;3d;5d' a.txt
22222boke
4444xxx44444
6666boke6666boke666boke

用法示例:s/g

[root@localhost ~]# cat a.txt
boke1111
22222boke
3333boke33333
4444xxx44444
5555xxx55555xxxx555xxx
6666boke6666boke666boke
[root@localhost ~]# sed 's/boke/BIGEGON/g' a.txt # 把所有行的所有的boke都换成BIGEGON
BIGEGON1111
22222BIGEGON
3333BIGEGON33333
4444xxx44444
5555xxx55555xxxx555xxx
6666BIGEGON6666BIGEGON666BIGEGON
[root@localhost ~]#
[root@localhost ~]# sed '/^boke/s/boke/GAGAGA/g' a.txt # 以egon开头的行中的boke换成GAGAGA
GAGAGA1111
22222boke
3333boke33333
4444xxx44444
5555xxx55555xxxx555xxx
6666boke6666boke666boke
[root@localhost ~]# sed '6s/boke/BIGEGON/' a.txt # 只把第6行的boke换成BIGEGON,加上g代表???
boke1111
22222boke
3333boke33333
4444xxx44444
5555xxx55555xxxx555xxx
6666BIGEGON6666boke666boke
[root@localhost ~]#
[root@localhost ~]# sed '1,3s/boke/BIGEGON/g' a.txt # 把1到3行的boke换成BIGEGON
BIGEGON1111
22222BIGEGON
3333BIGEGON33333
4444xxx44444
5555xxx55555xxxx555xxx
6666boke6666boke666boke
[root@localhost ~]# cat a.txt | sed '1,5d' # sed也支持管道
6666boke6666boke666boke

1.2 awk命令介绍

awk主要用于处理有格式的文本,例如/etc/passwd这种

> 用法

awk 选项 'pattern{action}' 文件路径

> 流程

-F 指定行分隔符

> 工作流程

awk -F: '{print $1,$3}' /etc/passwd
1、awk会读取文件的一行内容然后赋值给$0
2、然后awk会以-F指定的分隔符将该行切分成n段,最多可以达到100段,第一段给$1,第二段给$2,依次次类推
3、print输出该行的第一段和第三段,逗号代表输出分隔符,默认与-F保持一致
4、重复步骤1,2,3直到文件内容读完

> 内置变量

$0 一整行内容
NR 记录号,等同于行号
NF 以-F分隔符分隔的段数

> pattern可以是

/正则/
/正则/ # 该行内容匹配成功正则
$1 ~ /正则/ # 第一段内容匹配成功正则
$1 !~ /正则/ # 第一段内容没有匹配成功正则
比较运算:
NR >= 3 && NR <=5 # 3到5行
$1 == "root" # 第一段内容等于root

> action可以是

print $1,$3

用法示例

[root@localhost ~]# cat a.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]# awk -F: '/^root/{print $1,$3}' a.txt
root 0
[root@localhost ~]# awk -F: '$1 ~ /^d/{print $1,$3}' a.txt
daemon 2
[root@localhost ~]# awk -F: '$1 !~ /^d/{print $1,$3}' a.txt
root 0
bin 1
adm 3
lp 4
[root@localhost ~]# awk -F: 'NR>3{print $1}' a.txt
adm
lp
[root@localhost ~]# awk -F: '$1 == "lp"{print $0}' a.txt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]#
[root@localhost ~]# cat a.txt | awk -F: '{print $1}' # awk也支持管道
root
bin
daemon
adm
lp
[root@localhost ~]#

1.3 grep命令介绍

> 用法

grep 选项 '正则' 文件路径

> 选项

-n, --line-number 在过滤出的每一行前面加上它在文件中的相对行号
-i, --ignore-case 忽略大小写
--color 颜色
-l, --files-with-matches 如果匹配成功,则只将文件名打印出来,失败则不打印
通常-rl一起用,grep -rl 'root' /etc
-R, -r, --recursive 递归

用法示例

root@localhost ~]# grep '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# grep -n 'bash$' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
44:egon:x:1000:1000:egon:/home/egon:/bin/bash
[root@localhost ~]# grep -rl 'root' /etc
grep也可以支持管道 我们可以发现三剑客命令都支持管道
[root@localhost ~]# ps aux |grep ssh
root 968 0.0 0.2 112908 4312 ? Ss 14:05 0:00 /usr/sbin/sshd -D
root 1305 0.0 0.3 163604 6096 ? Ss 14:05 0:00 sshd: root@pts/0
root 1406 0.0 0.3 163600 6240 ? Ss 14:05 0:00 sshd: root@pts/1
root 2308 0.0 0.0 112724 984 pts/1 R+ 15:30 0:00 grep --color=auto ssh
[root@localhost ~]# ps aux |grep [s]sh
root 968 0.0 0.2 112908 4312 ? Ss 14:05 0:00 /usr/sbin/sshd -D
root 1305 0.0 0.3 163604 6096 ? Ss 14:05 0:00 sshd: root@pts/0
root 1406 0.0 0.3 163600 6240 ? Ss 14:05 0:00 sshd: root@pts/1

猜你喜欢

转载自blog.51cto.com/14993780/2645519