sed awk 样例

Posted Acumen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed awk 样例相关的知识,希望对你有一定的参考价值。

sed [options] \'[action]\' filename

options:

  -n:一般sed命令会把所有数据都输出到屏幕,如果加入此选项,则只会把经过sed命令处理的行输出到屏幕。

  -e:允许对输入数据应用多条sed命令编辑。

  -i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。

actions:

  -a:追加,在当前行后添加一行或多行

  -c:行替换,用c后面的字符串替换原数据行。

  -i:插入,在当前行前插入一行或多行。

  -d:删除,删除指定的行。

  -p:打印,输出指定的行。

  -s:字符替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字符串/新字符串/g”(和vim中的替换格式类似)

 1 [ucm@MacBook-Pro testpace]$ cat stu.log 
 2 ID    NAME    GENDER    SOURCE
 3 1    FURONG    F    99
 4 2    FENGJ    F    66
 5 3    CANG    F    88
 6 [ucm@MacBook-Pro testpace]$ sed \'2p\' stu.log 
 7 ID    NAME    GENDER    SOURCE
 8 1    FURONG    F    99
 9 1    FURONG    F    99
10 2    FENGJ    F    66
11 3    CANG    F    88
12 [ucm@MacBook-Pro testpace]$ sed -n \'2p\' stu.log 
13 1    FURONG    F    99
14 [ucm@MacBook-Pro testpace]$ 

delete 第二行到第四行的数据,但是不改变文件自身。

[ucm@MacBook-Pro testpace]$ sed \'2,4d\' stu.log 
ID	NAME	GENDER	SOURCE
 1 #在第二行后,追加该字符串
 2 [ucm@MacBook-Pro testpace]$ sed \'2a piaoliang jiushi renxing\' stu.log 
 3 ID    NAME    GENDER    SOURCE
 4 1    FURONG    F    99
 5 piaoliang jiushi renxing
 6 2    FENGJ    F    66
 7 3    CANG    F    88
 8 #在第二行前插入字符串
 9 [ucm@MacBook-Pro testpace]$ sed \'2i meinv\' stu.log 
10 ID    NAME    GENDER    SOURCE
11 meinv
12 1    FURONG    F    99
13 2    FENGJ    F    66
14 3    CANG    F    88
15 #c 行替换命令
16 [ucm@MacBook-Pro testpace]$ sed \'3c FENGJ bujige\' stu.log 
17 ID    NAME    GENDER    SOURCE
18 1    FURONG    F    99
19 FENGJ bujige
20 3    CANG    F    88
21 # 替换字符串
22 [ucm@MacBook-Pro testpace]$ sed \'3s/66/90/g\' stu.log 
23 ID    NAME    GENDER    SOURCE
24 1    FURONG    F    99
25 2    FENGJ    F    90
26 3    CANG    F    88
27 [ucm@MacBook-Pro testpace]$ cat stu.log 
28 ID    NAME    GENDER    SOURCE
29 1    FURONG    F    99
30 2    FENGJ    F    66
31 3    CANG    F    88
32 # 替换字符串 同时写入文件
33 # s前加数字,搜索指定位置,不加数字,搜索整篇文档;后面加g代表替换全部,不加g则,仅仅替换一处
34 [ucm@MacBook-Pro testpace]$ sed -i \'3s/66/90/g\' stu.log 
35 [ucm@MacBook-Pro testpace]$ cat stu.log 
36 ID    NAME    GENDER    SOURCE
37 1    FURONG    F    99
38 2    FENGJ    F    90
39 3    CANG    F    88
40 #执行多条sed命令
41 [ucm@MacBook-Pro testpace]$ sed -e \'s/FENGJ/boxilai/g;s/CANG//g\' stu.log 
42 ID    NAME    GENDER    SOURCE
43 1    FURONG    F    99
44 2    boxilai    F    90
45 3        F    88
46 [ucm@MacBook-Pro testpace]$ cat stu.log 
47 ID    NAME    GENDER    SOURCE
48 1    FURONG    F    99
49 2    FENGJ    F    90
50 3    CANG    F    88
51 [ucm@MacBook-Pro testpace]$ 

 

排序命令:

sort [option] filename

options:

  -f:忽略大小写

  -n:以数值进行排序,默认使用字符串进行排序

  -r:反向排序

  -t:指定分隔符,默认分隔符是制表符

  -k n[,m]:按照指定的字段范围进行排序。从第n字段开始,m字段结束。(默认到行尾)

1 #指定分隔符是“:”,用第三字段开头,第三字段结尾进行排序,就是只用第三个字段进行排序
2 [ucm@MacBook-Pro testpace]$ sort -t ":" -k "3,3" /etc/passwd
3 #以数值进行排序
4 [ucm@MacBook-Pro testpace]$ sort -n -t ":" -k "3,3" /etc/passwd

 

统计命令

wc [option] 文件名

options:

  -l:只统计行数

  -w:只统计单词数

  -m:只统计字符数

1 [ucm@MacBook-Pro testpace]$ wc /etc/passwd
2   42   86 2223 /etc/passwd
3 [ucm@MacBook-Pro testpace]$ wc -l /etc/passwd
4 42 /etc/passwd
5 [ucm@MacBook-Pro testpace]$ wc -w /etc/passwd
6 86 /etc/passwd
7 [ucm@MacBook-Pro testpace]$ wc -m /etc/passwd
8 2223 /etc/passwd
9 [ucm@MacBook-Pro testpace]$ 

 

字符截取命令

awk \'条件1{动作1}条件2{动作2}···\' filename

条件(Pattern):

  一般使用关系表达式作为条件

  x > 10 判断变量x是否大于10

  x>=10大于等于

  x<=10小于等于

动作(Action):

  格式化输出

  流程控制语句

 1 [ucm@MacBook-Pro testpace]$ df -h
 2 文件系统             容量  已用  可用 已用% 挂载点
 3 /dev/mapper/cl-root  143G  108G   28G   80% /
 4 devtmpfs             483M     0  483M    0% /dev
 5 tmpfs                497M  156K  497M    1% /dev/shm
 6 tmpfs                497M  7.1M  490M    2% /run
 7 tmpfs                497M     0  497M    0% /sys/fs/cgroup
 8 /dev/sda2            380M  130M  226M   37% /boot
 9 tmpfs                100M   20K  100M    1% /run/user/1000
10 [ucm@MacBook-Pro testpace]$ df -h | awk \'{print $1 "\\t" $3}\'
11 文件系统    已用
12 /dev/mapper/cl-root    108G
13 devtmpfs    0
14 tmpfs    156K
15 tmpfs    7.1M
16 tmpfs    0
17 /dev/sda2    130M
18 tmpfs    20K
19 [ucm@MacBook-Pro testpace]$ 
View Code
1 [ucm@MacBook-Pro testpace]$ df -h | grep "/cl-root" | awk \'{print $5}\'
2 80%
3 [ucm@MacBook-Pro testpace]$ df -h | grep "/cl-root" | awk \'{print $5}\' | cut -f 1 -d "%"
4 80
5 [ucm@MacBook-Pro testpace]$ 
 1 [ucm@MacBook-Pro testpace]$ awk \'BEGIN{print "this is testcase"} {print $2 "\\t" $4}\' stu.log 
 2 this is testcase
 3 NAME    SOURCE
 4 FURONG    99
 5 FENGJ    90
 6 CANG    88
 7 [ucm@MacBook-Pro testpace]$ awk \'BEGIN{print "this is testcase"}{print $2 "\\t" $4}\' stu.log 
 8 this is testcase
 9 NAME    SOURCE
10 FURONG    99
11 FENGJ    90
12 CANG    88
13 [ucm@MacBook-Pro testpace]$ awk \'{print $2 "\\t" $4}\' stu.log 
14 NAME    SOURCE
15 FURONG    99
16 FENGJ    90
17 CANG    88
18 [ucm@MacBook-Pro testpace]$ awk \'END{print "this is end"} {print $2 "\\t" $4}\' stu.log 
19 NAME    SOURCE
20 FURONG    99
21 FENGJ    90
22 CANG    88
23 this is end
24 [ucm@MacBook-Pro testpace]$ 

 FS内置变量

 1 [ucm@MacBook-Pro testpace]$ cat /etc/passwd | grep "/bin/bash" 
 2 root:x:0:0:root:/root:/bin/bash
 3 amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
 4 ucm:x:1000:1000:ucm:/home/ucm:/bin/bash
 5 [ucm@MacBook-Pro testpace]$ cat /etc/passwd | grep "/bin/bash" | grep -v root
 6 amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
 7 ucm:x:1000:1000:ucm:/home/ucm:/bin/bash
 8 [ucm@MacBook-Pro testpace]$ cat /etc/passwd | grep "/bin/bash" | grep -v root | awk \'{FS=":"} {print $1 "\\t" $3}\'
 9 amandabackup:x:33:6:Amanda    
10 ucm    1000
11 [ucm@MacBook-Pro testpace]$ cat /etc/passwd | grep "/bin/bash" | grep -v root | awk \'BEGIN{FS=":"} {print $1 "\\t" $3}\'
12 amandabackup    33
13 ucm    1000
14 [ucm@MacBook-Pro testpace]$ 

 

 1 [ucm@MacBook-Pro testpace]$ cat stu.log 
 2 ID    NAME    GENDER    SOURCE
 3 1    FURONG    F    99
 4 2    FENGJ    F    90
 5 3    CANG    F    88
 6 [ucm@MacBook-Pro testpace]$ cat stu.log | grep -v NAME
 7 1    FURONG    F    99
 8 2    FENGJ    F    90
 9 3    CANG    F    88
10 [ucm@MacBook-Pro testpace]$ cat stu.log | grep -v NAME | awk \'$4>=90{print $2}\'
11 FURONG
12 FENGJ
13 [ucm@MacBook-Pro testpace]$ 

 

以上是关于sed awk 样例的主要内容,如果未能解决你的问题,请参考以下文章

使用 sed 或 awk 预处理 C/C++ 代码时如何定位可靠的函数?

sed && awk 第二章runsed代码理解

管道sed | awk 或 awk | sed

如何在 sed 和 awk(和 perl)中搜索和替换任意文字字符串

awk&sed 小实例

如何使用 sed 或 awk 命令用变量(变量保存 Unix 脚本)查找和替换文本