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]$
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++ 代码时如何定位可靠的函数?