Linux三剑客


下面讲述关于linux中使用频率很高的三种命令,在业界称为“三剑客”他们是awk,sed,grep。让你跟随我带你走进linux的大门。

一、grep命令

grep文本过滤工具,用于查找文件里符合条件的字符串,会把含有范本样式的那一列显示出来。

选项

  1. -a : 将二进制文件以文本的方式查找数据。
  2. -c :计算找到‘查找字符’的次数。
  3. -i :忽略字符大小写的差别。
  4. -n :输出行号。
  5. -v :显示不包含匹配文本的所有行。

范例一:将/etc/passwd 中,出现root的那一行行显示出来

[root@localhost ~]# cat /etc/passwd |grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

范例二:与范例一相反只要没有‘root’就取出

[root@localhost ~]# cat /etc/passwd |grep -v root
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...

二、sed命令

sed本身是一个管道命令,可以分析标准输入,而且sed可以可以将数据进行选取,替换和删除 新增特定行为功能。我们来聊一下它的用途。

选项

  1. -n 一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
  2. *-e 允许对输入数据应用多条sed命令编辑
  3. -f /PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
  4. -r 支持使用扩展正则表达式
  5. -i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
  6. -i.bak 备份文件并原处编辑

动作说明:

a :新增, 追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用”/“代表数据未完结。
c :取代, 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用“”代表数据未完结。
d :删除,删除指定的行;
i :插入,插入,在当期行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用“”代表数据未完结。
p :打印,输出指定的行
s :取代, 字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”(和vim中的替换格式类似)。

sed [选项] ‘[动作]’ 文件名
*动作要用双丹引号

范例一
查看文件的第二行

[root@localhost ~]# sed -n '2p' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# cat passwd | sed -n '2p'
bin:x:1:1:bin:/bin:/sbin/nologin

范例二
删除 第二行到第四行的数据但不修改文件本身

[root@localhost ~]# sed  '2,4d' passwd 
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
...

范例三
追加在第二行后面追加hello

[root@localhost ~]# sed '2a hello' passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
hello
daemon:x:2:2:daemon:/sbin:/sbin/nologin

范例四
插入 在第二行前插入hello

[root@localhost ~]# sed '2i hello' passwd 
root:x:0:0:root:/root:/bin/bash
hello
bin:x:1:1:bin:/bin:/sbin/nologin

范例五
数据替换 把第一行替换成 hello

[root@localhost ~]# sed '1c hello ' passwd 
hello 
bin:x:1:1:bin:/bin:/sbin/nologin

范例六
字符串替换 sed ‘s/旧字串/新字串/g ’ 文件名
把第一行的root换成hello

[root@localhost ~]# sed '1s/root/hello/g' passwd 
hello:x:0:0:hello:/hello:/bin/bash

范例七
把sed操作写入文件

[root@localhost ~]# sed -i '1s/root/hello/g' passwd 
[root@localhost ~]# cat passwd 
hello:x:0:0:hello:/hello:/bin/bash

三、awk命令

1.cut

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
cut [选项] 文件名

选项

-f 列号 提取第几列
-d分隔符 按照指定分隔符风格列

范例一
查看第一列和第三列 用:分开 /etc/passwd

[root@localhost ~]# cut -d ":" -f 1,3 /etc/passwd
root:0
bin:1
daemon:2

2.prlntf命令

print 会在每个输出之后自动加入一个换行符;而 printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,则需要手工加入换行符。(linux默认没有print命令但可以在awk中用)
格式
printf ‘输出类型输出格式’ 输出内容

输出类型:

%ns:输出字符串。n 是数字,指输出几个字符;
%ni:输出整数。n 是数字,指输出几个数字‘’
%m.nf: 输出浮点数。m 和 n 是数字,指输出的整数位数和小数位数。如
%8.2f 代表共输出 8 位数,其中 2 位是小数,6 位是整数;

输出格式:

\a: 输出警告声音;
\b:输出退格键,也就是 Backspaced 键;
\f:清除屏幕;
\n:换行;
\r:回车,也就是 Enter 键;
\t:水平输出退格键,也就是 Tab 键;
\v:垂直输出退格键,也就是 Tab 键;

范例

[root@localhost ~]# printf '%s' 1 2 3 4 5 6
123456[root@localhost ~]# 

[root@localhost ~]# printf '%s\n' 1 2 3 4 5 6
1
2
3
4
5
6

3.awk命令

awk ‘ 条件1{动作1}条件2{动作2}… ’ 文件名

条件: 一般使用关系表达式作为条件 列如 x>10 不加条件所有都执行
动作:格式化输出
流程控制语句
实例一
输出student.txt中的第一列和第二列

[root@localhost ~]# awk '{print $1 "\t" $2}' student.txt 
ID	Name
1	LiMing
2	XiaoHua
3	LiHua

范例二
查看磁盘使用情况的第2,3,4 列

[root@localhost ~]# df -h |awk '{print $2 "\t" $3 "\t" $4}'
Size	Used	Avail
17G		1.6G	16G
478M	0	478M
489M	0	489M
489M	6.8M	482M
489M	0	489M
1014M	125M	890M
98M		0	98M

范例三
用 ifconfg 获取本机IP地址(结果只显示IP地址)

localhost ~]# ifconfig ens33 |grep "inet " | awk '{ print $2}'
192.168.92.136

范例四
前面加BEGIN 在输出前可以输出一句话test

[root@localhost ~]# awk 'BEGIN{print "test !!!"} {print $1 "\t" $2}' student.txt 
test !!!
ID	Name
1	LiMing
2	XiaoHua
3	LiHua

范例五
FS 指定分隔符
将passwd的 ‘:’换成制表符

[root@localhost ~]# awk '{FS=":"}{print $1 "\t S3"}' /etc/passwd
root:x:0:0:root:/root:/bin/bash	 S3
bin	 S3
daemon	 S3
adm	 S3
lp	 S3

范例六
END 所有命令执行完在输出一个命令

[root@localhost ~]# awk 'BEGIN{print "test!!!"}END{print "====================================="} {print $1 "\t" $2}' student.txt 
test!!!
ID	Name
1	LiMing
2	XiaoHua
3	LiHua
=====================================

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值