您的位置:首页 > 其它

Sed \Awk 的一些用法

2012-11-01 22:04 399 查看

sed 非交互式流编辑器

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),

接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

echo "a,b,c,d" |sed 's/,/\n/g' 列显示

sed 's/^/hello world /g' /etc/passwd #每行开头处添加hello world

sed '1,4d' myfile #删除1到4行数据

sed '/La/d' myfile #删除含有La的数据行 //代表搜索

sed '/[0-9]\{3\}/d' #myfile 把含有3位数的行删除,剩下的显示

sed '/^$/d' myfile #删除myfile的空白行,^表开头,$表尾部

sed '/La/!d' myfile #把不含La的数据行删除

sed -n '/La/p' myfie #把含有La的数据行显示出来,-n只显示符合样式数据行

sed -n 's/La/Oo/gp' myfile #全部把La替换成Oo,并显示

sed -n 's/La//p' myfile #把每一行第一个出现的La删除

sed 's/^...//' myfile #把每一行开头的3个字符删除

sed 's/...$//' myfile #把每一行末尾3个字符删除

sed -n '/root/s/^/#/gp' myfile #注释包含 root 的行

sed '/centos/a \linux is OS' userfile.txt #追加在查找关键词行centos的后面

sed '/centos/i \linux is OS' userfile.txt #插入到查找关键词行centos的前面

sed -e '/centos/c linux is OS' userfile1.txt #用新的文本改变本行的文本

sed '/centos/w userfile2.txt' userfile.txt #查找userfile.txt文件的关键字centos,并追加写入到文件userfile2.txt中

sed '2q' userfile.txt # 显示到第二行就退出

sed -e 's/centos/linux/' -e '2q' userfile.txt #只对文件的前二行就行匹配替换(替换到第二行就退出了)

sed -n 's/\(La\)/\1Oo/p' myfile #把找到的La存起来,用\1取回来再使用

sed -n '/AAA/s/234/567/p' myfile #找到含AAA的那行,将234换成567

sed -n '/AAA/,/DDD/s/B/567/p' myfile #将含有AAA到含有DDD的那几行,将其中的B换成567

sed -n '2,4s/B/567/p' myfile #从第2行到第4行,都将其中的B换成567

echo ' hello world!' |sed 's/^ *//g' #删除行首空格

echo ' hello world!' |sed -n 's/^[[:space:]]*//gp'

echo "hello hello hello" |sed 's/hello/HELLO/2g' 从第二处起开始替换

sed -n '$p' /etc/passwd 打印最后一行

sed -n '1,3 s/root/a-&-b/gp' /etc/passwd & 已匹配字符串标记

awk 文本切割工具

awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk -F: '!/root/' /etc/passwd #取反

awk -F: 'NR!=1{print $1,$3}' /etc/passwd #打印1和3字段,除了第一行

awk -F: '{print NR,$0}' /etc/passwd #打印行号

awk '$3>0 {print $1,$2 * $3}' temp #打印第三字段大于0的

netstat -na |awk '$3==0 && $6=="LISTEN" || NR==1' 过滤条件

ps auxw |awk '{print $2}' #获取系统当前pid列表

awk '/La/' myfile #显示含La的数据行

awk '{print $1,$2}' myfile #显示myfile每一行的第1和第2个字段

awk -F: '/user2/{print $2}' /etc/passwd 打印包含user2的第二列

awk '/La/{print $1,$2}' #将含有La关键词的第1和第2个字段显示

awk -F: '{print $1"\t"$3}' /etc/passwd 制表符分隔

awk -F: '/^user1/{print $3,$4}' /etc/passwd #使用选项-F,指定:为分隔符打印帐号user1的uid、gid

awk -F: 'BEGIN{OFS="+++"}'/^user1/{ print $1,$2,$3,$4,$5 }' /etc/passwd #以:为分隔符,+++为输出字段分隔符,将user1的第1~5栏显示

awk -F: '/root/,/user1/' /etc/passwd #打印root到user1之间的文本

awk 'length>15' /etc/passwd #打印出长度大于15的行

栏显示

ifconfig |grep 'inet addr:' | grep Bcast |awk '{print $2}' |awk -F: '{print $2}' #取得网卡的IP
cat /proc/net/dev |awk -F: '/eth.:|ppp.:|wlan.:/{print $1}' #取得网络设备名称
cat /proc/meminfo |awk '/MemTotal/{print $2}' #取得内存大小
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: