IT培训网 - IT职场人学IT技术上IT培训网
Sed命令和AWK命令用法详解 西安Linux培训师三十分钟帮你搞定
时间:2018-08-29 11:39:17 来源:电脑培训网 作者:IT培训网 已有:名学员访问该课程
Sed命令是什么?AWK命令又是什么?两者的用法你会吗?无论如何,没有关系,下面跟随西安LINUX培训班资深讲师一起进行详细解析。
sed替换的基本语法:
sed 's/原字符串/替换字符串/' filename
可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个,例如:
sed 's/原字符串/替换字符串/' //替换所有匹配关键字
sed 's/^/添加的头部&/g' //在所有行首添加
sed 's/$/&添加的尾部/g' //在所有行末添加
sed '2s/原字符串/替换字符串/g' //替换第2行
sed '$s/原字符串/替换字符串/g' //替换最后一行
sed '2,5s/原字符串/替换字符串/g' //替换2到5行
sed '2,$s/原字符串/替换字符串/g' //替换2到最后一行
sed 's/^/添加的头部&/g;s/$/&添加的尾部/g' //同时执行两个替换规则
sed处理过的输出是直接输出到屏幕上的,要保存可以将输出重定向,或者使用参数”i”直接在文件中替换:
sed -i 's/原字符串/替换字符串/g' filename //替换文件中的所有匹配项
sed 文本编辑器(vim)
增,删,改,查
特色:流处理器【逐行处理的流处理器】
语法格式
sed 's/原字符串/替换字符串/' filename
sed 选项 ‘定位指令’ 文件
sed -n "3p" /etc/passwd //3p 打印第三行//【sed有个默认输出的功能】-n屏蔽默认输出
[root@sanpao1 ~]# vim 1.txt
[root@sanpao1 ~]# sed "2p" 1.txt
1.定位
用行号定位、
vim 1.txt
[root@sanpao1 ~]# sed -n "2,3p" 1.txt
[root@sanpao1 ~]# sed -n "2p;4p" 1.txt
[root@sanpao1 ~]# sed -n "1~2p" 1.txt
[root@sanpao1 ~]# sed -n "2~2p" 1.txt
[root@sanpao1 ~]# sed -n "1~3p" 1.txt //步长3
2.正则
/正则/
sed -n “/root/p” 文件 //把有root的那一行打印
sed -n “/root/d” 文件 //-d删除
[root@room3pc14 桌面]# sed -n "/root/p" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
3.指令
增【a,i】 sed "3i xxx" 文件 //a是在3后添加,i是在3前添加
[root@sanpao1 test]# sed "3a xxxx" a.txt //有默认输出。先测试,再-i【修改原文件】。
xxxx
[root@sanpao1 test]# sed "3i xxxx" a.txt
xxxx
[root@sanpao1 test]# cat a.txt
[root@sanpao1 test]# sed -i "3i xxxx" a.txt 【确认好没有问题,再添加-i】
[root@sanpao1 test]# cat a.txt
xxxx
---------------------------------------------------------------------------------------------------------------------------
删 [d] sed '3d' 文件
sed "/[0-9]/d" 文件
---------------------------------------------------------------------------------------------------------------------------
改[c,s] [change,substitute] 【注意:c修改一整行,s仅修改某个关键词】
sed "3c xxx" 文件
sed "/正则/c 内容"
sed "3【3可加可不加,仅替换第三行】s/old/new/" 文件 s 关键词替换
sed -r【扩展正则】"s/[0-9]/new/" 文件
sed “s/x//” 文件 把x替换成空,即删除【变相删除】
[root@sanpao1 test]# sed "3c vv" a.txt //不管第三行是什么,都改成vv
[root@sanpao1 test]# sed "c xxxx" a.txt //替换全文0
xxxx
xxxx
xxxx
[root@sanpao1 test]# sed "s/2010/xxxx/" a.txt //默认替换每行第一个
xxxx 2011 2010
2001 2006 xxxx
xxxx 2010 2010
[root@sanpao1 test]# sed "s/2010/xxxx/2" a.txt //替换每行第二个
2010 2011 xxxx
2001 2006 2010
2010 xxxx 2010
[root@sanpao1 test]# sed "3s/2010/xxxx/2" a.txt //替换第三行第二个
2010 2011 2010
2001 2006 2010
2010 xxxx 2010
[root@sanpao1 test]# sed "s/2010/xxxx/g" a.txt //替换所有
xxxx 2011 xxxx
2001 2006 xxxx
xxxx xxxx xxxx
[root@sanpao1 test]# sed "s/$/ xxx/" a.txt //$在每行的行尾添加xxx
2010 2011 2010 xxx
2001 2006 2010 xxx
2010 2010 2010 xxx
----------------------------------------------------------------------华丽的分割线------------------------------------------------------------------------------------------------
awk数据过滤工具功能类似于grep
流处理器【逐行处理工具】
awk 选项 ‘条件{指令}’ 文件
[root@sanpao1 ~]# awk '{print}' /etc/passwd //全文打印===cat【没有条件】
awk ‘/正则/’ /etc/passwd 【没有指令】
[root@sanpao1 ~]# awk '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
awk 有列的概念,内置变量 //不能用“”,‘’中的$1,$2,awk可以看懂
$0【打印所有】$1【第一列】$2【第二列】
*************************************************************************************
[root@sanpao1 ~]# tailf /var/log/secure //安全登陆日志
Apr 16 20:03:56 sanpao1 polkitd[1059]: Finished loading, compiling and executing 6 rules
Apr 16 20:03:56 sanpao1 polkitd[1059]: Acquired the name org.freedesktop.PolicyKit1 on the system bus
Apr 16 20:04:28 sanpao1 sshd[1480]: Server listening on 0.0.0.0 port 22.
Apr 16 20:04:28 sanpao1 sshd[1480]: Server listening on :: port 22.
Apr 16 20:05:45 sanpao1 login: pam_unix(login:session): session opened for user root by LOGIN(uid=0)
Apr 16 20:05:45 sanpao1 login: ROOT LOGIN ON tty1
Apr 16 20:06:01 sanpao1 sshd[2962]: Accepted publickey for root from 192.168.4.254 port 52415 ssh2: RSA 78:93:f8:74:7d:15:59:55:41:01:b5:06:45:91:0c:62
Apr 16 20:06:01 sanpao1 sshd[2962]: pam_unix(sshd:session): session opened for user root by (uid=0)
Apr 16 21:41:39 sanpao1 sshd[7983]: Accepted publickey for root from 192.168.4.254 port 52436 ssh2: RSA 78:93:f8:74:7d:15:59:55:41:01:b5:06:45:91:0c:62
Apr 16 21:41:39 sanpao1 sshd[7983]: pam_unix(sshd:session): session opened for user root by (uid=0)
RAR RAR破解
字典【passwd password 123456
暴力破解00 01 02 03 0a 0b
[root@sanpao1 ~]# cat /usr/share/dict/linux.words //linux中的字典
awk '/Failed/{print $11}' /var/log/secure
i=`awk '/Failed/{print $11}' /var/log/secure`
x=192.168.4.5 192.168.4.58 192.168.4.3
for i in $x
do
firew<tab>
done
NR 当前行的行数
NF 当前行的列数
# cat test.sh
hello the world
ni hao
sanpo
# awk '{print NR}' test.sh
# awk '/hello/{print NR}' test.sh
# awk '{print NF}' test.sh
# awk '/the/{print NF}' test.sh
# awk '{print $NR}' test.sh //$NR所有行第一列
hello
hao
# awk '{print $NF}' test.sh //$NF最后一列
world
hao
sanpo
##注意事项:awk默认以空格或tab为分割,理解列
-F 选项可以制定分隔符
# awk -F: '{print $1}' /etc/passwd
# cat test.sh
hello the,world
ni hao:BJ
sanpo;ip
# awk -F: '{print $2}' test.sh
BJ
# awk -F, '{print $2}' test.sh
world
# awk -F[, : ] '{print $2}' test.sh
awk: fatal: Unmatched [ or [^: /[,/
# awk -F"[, : ]" '{print $2}' test.sh
the
hao
# awk -F"[, : ; ]" '{print $2}' test.sh
the
hao
ip
------------------------------------------------------------------ ---------------------------------------------------------------------------------------
# df -h /
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 50G 2.9G 48G 6% /
# df / | awk '{print $4}'
可用
49365884
# df / | awk '/root/{print $4}'
49365884
cipan=`df / | awk '/root/{print $4}'`
[ $cipan -le 5000 ] && mail 163
# awk '{print "title"}' /etc/passwd //可以打常量
# awk -F: '{print "账户:"$1,"uid:"$3}' /etc/passwd 【,让两个两之间有空格】
# awk -F: '{print "账户:"$1,"\tuid:"$3}' /etc/passwd 【\t相当于tab键】
账户:root uid:0
账户:bin uid:1
账户:daemon uid:2
账户:adm uid:3
# awk -F: '{print "账户:"$1,"\nUID:"$3}' /etc/passwd 【\n 相当于回车,另起一行】
账户:root
UID:0
账户:bin
UID:1
账户:daemon
UID:2
账户:adm
UID:3
# awk -F: '{print "账户:"$1,"\ruid:"$3}' /etc/passwd
uid:0root
uid:1bin
uid:2daemon
uid:3adm
# awk '{print NR}' test.sh /etc/hosts //从自己角度
# awk '{print FNR}' test.sh /etc/hosts //从原始文件角度
===========================================================
awk '' 文件
awk 'BEGIN{} 条件{} END{}' 文件
BEGIN后面的命令,在读取文件之前执行
条件{}后面的命令,在读取文件的过程中执行
END{}后面的命令,在读取文件后执行
#awk -F: 'BEGIN{print "账户:\tUID"}'
# awk -F: 'BEGIN{print "账户\t\tUID"} {print $1"\t\t"$3}' /etc/passwd
# awk -F: 'BEGIN{print "账户\t\tUID"} {print $1"\t\t"$3} END{print "总共有:"NR}' /etc/passwd
账户 UID
root 0
bin 1
daemon 2
adm 3
总共有:47
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FS 保存或设置字段分隔符,例如FS=“:”
$n 指定分隔的第n个字段,如$1,$3分别表示第1、第3列
$0 当前读入的整行文本内容
NF 记录当前处理行的字段个数(列数)
NR 记录当前已读入行的数量(行数)
FNR 保存当前处理行在原文本内的序号( 行号)
每期开班座位有限.0元试听抢座开始!
温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。
- 上一篇:唐山技校有哪些 唐山技校招生情况
- 下一篇:简要分析Git的安装与简单部署配置