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中的替换格式类似)

 [ucm@MacBook-Pro testpace]$ cat stu.log
ID NAME GENDER SOURCE
FURONG F
FENGJ F
CANG F
[ucm@MacBook-Pro testpace]$ sed '2p' stu.log
ID NAME GENDER SOURCE
FURONG F
FURONG F
FENGJ F
CANG F
[ucm@MacBook-Pro testpace]$ sed -n '2p' stu.log
FURONG F
[ucm@MacBook-Pro testpace]$

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

[ucm@MacBook-Pro testpace]$ sed '2,4d' stu.log
ID NAME GENDER SOURCE
 #在第二行后,追加该字符串
[ucm@MacBook-Pro testpace]$ sed '2a piaoliang jiushi renxing' stu.log
ID NAME GENDER SOURCE
FURONG F
piaoliang jiushi renxing
FENGJ F
CANG F
#在第二行前插入字符串
[ucm@MacBook-Pro testpace]$ sed '2i meinv' stu.log
ID NAME GENDER SOURCE
meinv
FURONG F
FENGJ F
CANG F
#c 行替换命令
[ucm@MacBook-Pro testpace]$ sed '3c FENGJ bujige' stu.log
ID NAME GENDER SOURCE
FURONG F
FENGJ bujige
CANG F
# 替换字符串
[ucm@MacBook-Pro testpace]$ sed '3s/66/90/g' stu.log
ID NAME GENDER SOURCE
FURONG F
FENGJ F
CANG F
[ucm@MacBook-Pro testpace]$ cat stu.log
ID NAME GENDER SOURCE
FURONG F
FENGJ F
CANG F
# 替换字符串 同时写入文件
# s前加数字,搜索指定位置,不加数字,搜索整篇文档;后面加g代表替换全部,不加g则,仅仅替换一处
[ucm@MacBook-Pro testpace]$ sed -i '3s/66/90/g' stu.log
[ucm@MacBook-Pro testpace]$ cat stu.log
ID NAME GENDER SOURCE
FURONG F
FENGJ F
CANG F
#执行多条sed命令
[ucm@MacBook-Pro testpace]$ sed -e 's/FENGJ/boxilai/g;s/CANG//g' stu.log
ID NAME GENDER SOURCE
FURONG F
boxilai F
F
[ucm@MacBook-Pro testpace]$ cat stu.log
ID NAME GENDER SOURCE
FURONG F
FENGJ F
CANG F
[ucm@MacBook-Pro testpace]$

排序命令:

sort [option] filename

options:

  -f:忽略大小写

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

  -r:反向排序

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

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

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

统计命令

wc [option] 文件名

options:

  -l:只统计行数

  -w:只统计单词数

  -m:只统计字符数

 [ucm@MacBook-Pro testpace]$ wc /etc/passwd
/etc/passwd
[ucm@MacBook-Pro testpace]$ wc -l /etc/passwd
/etc/passwd
[ucm@MacBook-Pro testpace]$ wc -w /etc/passwd
/etc/passwd
[ucm@MacBook-Pro testpace]$ wc -m /etc/passwd
/etc/passwd
[ucm@MacBook-Pro testpace]$

字符截取命令

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

条件(Pattern):

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

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

  x>=10大于等于

  x<=10小于等于

动作(Action):

  格式化输出

  流程控制语句

 [ucm@MacBook-Pro testpace]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root 143G 108G 28G % /
devtmpfs 483M 483M % /dev
tmpfs 497M 156K 497M % /dev/shm
tmpfs 497M 7.1M 490M % /run
tmpfs 497M 497M % /sys/fs/cgroup
/dev/sda2 380M 130M 226M % /boot
tmpfs 100M 20K 100M % /run/user/
[ucm@MacBook-Pro testpace]$ df -h | awk '{print $1 "\t" $3}'
文件系统 已用
/dev/mapper/cl-root 108G
devtmpfs
tmpfs 156K
tmpfs 7.1M
tmpfs
/dev/sda2 130M
tmpfs 20K
[ucm@MacBook-Pro testpace]$
 [ucm@MacBook-Pro testpace]$ df -h | grep "/cl-root" | awk '{print $5}'
%
[ucm@MacBook-Pro testpace]$ df -h | grep "/cl-root" | awk '{print $5}' | cut -f -d "%" [ucm@MacBook-Pro testpace]$
 [ucm@MacBook-Pro testpace]$ awk 'BEGIN{print "this is testcase"} {print $2 "\t" $4}' stu.log
this is testcase
NAME SOURCE
FURONG
FENGJ
CANG
[ucm@MacBook-Pro testpace]$ awk 'BEGIN{print "this is testcase"}{print $2 "\t" $4}' stu.log
this is testcase
NAME SOURCE
FURONG
FENGJ
CANG
[ucm@MacBook-Pro testpace]$ awk '{print $2 "\t" $4}' stu.log
NAME SOURCE
FURONG
FENGJ
CANG
[ucm@MacBook-Pro testpace]$ awk 'END{print "this is end"} {print $2 "\t" $4}' stu.log
NAME SOURCE
FURONG
FENGJ
CANG
this is end
[ucm@MacBook-Pro testpace]$

FS内置变量

 [ucm@MacBook-Pro testpace]$ cat /etc/passwd | grep "/bin/bash"
root:x:::root:/root:/bin/bash
amandabackup:x:::Amanda user:/var/lib/amanda:/bin/bash
ucm:x:::ucm:/home/ucm:/bin/bash
[ucm@MacBook-Pro testpace]$ cat /etc/passwd | grep "/bin/bash" | grep -v root
amandabackup:x:::Amanda user:/var/lib/amanda:/bin/bash
ucm:x:::ucm:/home/ucm:/bin/bash
[ucm@MacBook-Pro testpace]$ cat /etc/passwd | grep "/bin/bash" | grep -v root | awk '{FS=":"} {print $1 "\t" $3}'
amandabackup:x:::Amanda
ucm
[ucm@MacBook-Pro testpace]$ cat /etc/passwd | grep "/bin/bash" | grep -v root | awk 'BEGIN{FS=":"} {print $1 "\t" $3}'
amandabackup
ucm
[ucm@MacBook-Pro testpace]$
 [ucm@MacBook-Pro testpace]$ cat stu.log
ID NAME GENDER SOURCE
FURONG F
FENGJ F
CANG F
[ucm@MacBook-Pro testpace]$ cat stu.log | grep -v NAME
FURONG F
FENGJ F
CANG F
[ucm@MacBook-Pro testpace]$ cat stu.log | grep -v NAME | awk '$4>=90{print $2}'
FURONG
FENGJ
[ucm@MacBook-Pro testpace]$
上一篇:【刷题】BZOJ 1565 [NOI2009]植物大战僵尸


下一篇:从零打卡leetcode之day 4--无重复最长字符串