当前位置 : IT培训网 > 常见问题 > Sed命令和AWK命令用法详解 西安Linux培训师三十分钟帮你搞定

Sed命令和AWK命令用法详解 西安Linux培训师三十分钟帮你搞定

时间:2018-08-29 11:39:17  来源:电脑培训网  作者:IT培训网  已有:名学员访问该课程
Sed命令是什么?AWK命令又是什么?两者的用法你会吗?无论如何,没有关系,下面跟随西安LINUX培训班资深讲师一起进行详细解析。

Sed命令是什么?AWK命令又是什么?两者的用法你会吗?无论如何,没有关系,下面跟随西安LINUX培训班资深讲师一起进行详细解析。

Sed命令和AWK命令用法详解  西安Linux培训师三十分钟帮你搞定_www.cnitedu.cn

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)
0%
踩一下
(0)
0%

IT培训0元试听 每期开班座位有限.0元试听抢座开始! IT培训0元试听

  • 姓名 : *
  • 电话 : *
  • QQ : *
  • 留言 :
  • 验证码 : 看不清?点击更换请输入正确的验证码

在线咨询在线咨询

温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。

------分隔线----------------------------
------分隔线----------------------------

推荐内容

相关热点