我是靠谱客的博主 现实人生,最近开发中收集的这篇文章主要介绍20200604sed awk,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

写在前面:

又是linux复习

感觉对未来的规划更加清楚了,知道了自己想要什么,最近还是比较开心啊,但是学习的进度真是有些慢了。想用自己的第一个月的薪水买mac book pro,哈哈。但是听说公司普遍降薪了。现在就想着三年后,合同到期,自己就要跳槽的事情。

[:alnum:]数字英文字母 0~9 A~Z a~z
[:alpha:]英文字母A~Z a~z
[:blank:]代表空格键与Tab键
[:digit:]代表数字
[:lower:]a~z
[:upper:]A~Z

grep

-c         计算找到字符的次数

-i          忽略大小写的不同

-n         输出行号

-v          反向选择

-A         后面可加数字,为after,将除了改行,后续n行也输出

-B         后面加数字,为before, 除了列出改行外,前面的n行也列出来

# 关键字所在行的前两行和后三行都列出来
demsg | grep -n A3 -B2 'xx'

带正则的gerp

grep -n 't[ae]st' xx
grep -n '[^g]oo' xx
grep -n '[0-9]' xx
gerp -n '[^[:lower:]]oo' xx
grep -n '[[:digit:]]' xx
grep -n '^the' xx
gerp -n '^[^a-zA-Z]' xx
# 第一个^是以开头的意思,第二个是非的意思
grep -n '.$'
xx
gerp -n '^$' xx 选择空白
grep -n 'go{2,5}'
xx # 注意要转义

sed

-n 使用安静模式,在一般的sed的使用法中,所有来自stdin的数据一般都会被列出到屏幕上,但是如果加上了-n参数后,则只有经过sed特殊处理的那一行才会被列出来。

-e 直接在命令模式上进行sed操作编辑。

-f 直接将sed的操作写在一个文件内,-filename 则可以执行filenam内的sed操作。

-r sed的操作使用的是扩展正则表达式的语法。

-i 直接修改读取的文件内容,而不是由屏幕输出。

操作说明: [n1,[n2]] function

n1,n2 位数字,表示数字范围

a      新增,a的后面可以接字符串,这些字符会在新的一行出现,目前的下一行

c      替换,c的后面可以接字符,这些字符可以替换n1,n2之间的行

d      删除,因为删除,所以后面通常不接任何东西

i       插入,i的后面可以接字符,而这些字符会在新的一行出现,目前的上一行

p      打印,亦即某个选择的数据打印出来

s      替换,可以直接进行替换的工作,通常这个 s的操作可以搭配正则表达式,例如,1,20s/old/new/g

 nl /etc/passwd | sed '2,5d'
# nl是添加行号打印,同时将2~5行删除
nl /etc/passwd | sed '2d'
# 删除第二行
nl /etc/passwd | sed '3,$d'
# 删除第三行之后,不包括第二行
nl /etc/passwd | sed '2a drink tea'
# 在第二行后添加
1	root:x:0:0:root:/root:/bin/bash
2	bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
nl /etc/passwd | sed '2i drink tea'
# 在第二行后面添加
nl /etc/passwd | sed '2,5c xxxx'
# 二到五行 替换成xx
nl /etc/passwd | sed -n '5,7p'
# 将5到7行打印出来

替换:

sed 's/要被替换的字符/新的字符/g'
vim的替换
n1,n2s/word1/word2/g

sed直接修改文件内容

sed -i 's/.$/!/g' xx
# 直接替换文件内容
sed -i '$a XX' XX
# 在最后一行添加,$最后一行,a是添加
sed -i 's/off/down/g' test

 

egrap:

就是grep -e  ,就是grep加正则。

grep -v '^$' xx | grep -v '^#'
# 去除空白行和以#开头的行
egrep -v '^$ | ^#' xx
# 等价于下边

 

printf:

a    警告声音输出

n    输出新的一行

b    退格键

f     清除屏幕

v    垂直tab按键

r    回车按键

t    水平的tab键   

printf '%10st %st %st %st %st n' $(cat test)

 

awk

awk主要是处理每一行的字段内的数据,而默认的字段的分隔符为"空格键"和tab键。

$0 代表一整行数据

[root@iz2zeczv3xrnm2jx6aayhxz ~]# last -n 5
root
pts/0
36.49.165.15
Fri Jun
5 12:53
still logged in
root
pts/0
36.49.165.15
Thu Jun
4 22:46 - 22:59
(00:13)
root
pts/0
36.49.165.15
Thu Jun
4 20:38 - 22:12
(01:33)
root
pts/2
172.24.20.165
Wed Jun
3 14:25 - 14:25
(00:00)
root
pts/2
172.24.20.165
Wed Jun
3 14:24 - 14:24
(00:00)
last -n 5 | awk '{print $1 "t" $3}'
# $1是第一个变量的意思,$3是第二个变量的意思
root	36.49.165.15
root	36.49.165.15
root	36.49.165.15
root	172.24.20.165
root	172.24.20.165

awk的几个变量

NF    每一行拥有字段总数

NR    目前awk所处理的是第几行数据

FS     目前的分割符号,默认是空格键

逻辑运算符:

<, >, >=, <=, ==, !=

last -n 5 | awk '{print $1 "t" NR "t col" NR}'

 下面的逻辑是看行数,如果行数大于3,就换分隔符,但是有个问题,就是第一行没生效,这是因为第一行,那些变量默认时还是以空格分割的。

cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "t" $3}'
root:x:0:0:root:/root:/bin/bash
bin	1
daemon	2
adm	3
lp	4
sync	5
shutdown	6
halt	7
mail	8
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 <10 {print $1 "t" $3}'
root	0
bin	1
daemon	2
adm	3
lp	4
sync	5
shutdown	6
halt	7
mail	8

稍微复杂的命令,就是加了一个total 字段,并且计算和

注意换行 是  末尾 加回车

cat test | awk 'NR==1 {printf "%10s %10s %10s %10s %10sn", $1, $2, $3, $4, "total"}
NR>=2{total = $2 + $3 + $4
printf "%10s %10d %10d %10d %10.2fn", $1, $2, $3, $4, total}'
Name
Chi
Eng
mat
total
dotsai
80
60
92
232.00
VB
75
55
80
210.00

加上if判断:

 cat test | awk '{if(NR==1) printf "%10s %10s %10s %10s %10sn", $1,$2,$3,$4,"Total"}
NR>=2{total = $2+$3+$4
printf "%10s %10d %10d %10d %10.2fn",$1,$2,$3,$4, total}'

 

文件对比 diff

比对两个文件的差异,以行为单位对比。

cat /etc/passwd | sed -e '4d' -e '3,6c six six' > passwd.new
# 删除第四行 替换第三到六行
diff /etc/passwd passwd.new
3,6c3
< 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
< sync:x:5:0:sync:/sbin:/bin/sync
---
> six six

diff [-bBi] from-file to-file

from-file: 一个文件名,作为原始对比文件

to-file: 文件名,作为目标对比文件

-b:   忽略一行当中,仅有多个空的差异,about me 和 about   me 的区别

-B:   忽略空白行的差异

-i:     忽略大小的不同

最后

以上就是现实人生为你收集整理的20200604sed awk的全部内容,希望文章能够帮你解决20200604sed awk所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部