sed

sed [选项] 动作 文件
-n #取消默认输出 ,有n必须要有p,有p加了n才不会有默认输出
-i #真正的替换,修改
-r #支持扩展正则 (* [A-z] '|') 内部命令: p #打印 -n /号可以不能用别的符号替换-# d #删除 /号可以不能用别的符号替换-# s #替换 #号可以不能用别的符号替换-/
g #全局 a #追加
i #插入 ; #不连续命令的分割 行--删除--
, #表示连续的命令 行--删除--
'|' #或者 行--删除-- 1.查 [root@qls ~]# sed -n '1p' passwd #打印单行,第一行,不能用 ^P
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# sed -n '1,3p' passwd #打印连续的多行 不能 '1p,3p'
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# sed -n '1p;3p' passwd #打印不连续的多行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# sed -n '$p' passwd #打印最后一行 不能 p$
ntp:x:38:38::/etc/ntp:/sbin/nologin # 连续的行1个p,多个不连续的行2个p(引号最好都加上)-------------- [root@oldboy ~]# stat 2. | sed -n '1,$p' 引号必须要加
File: ‘2.’
Size: 10244 Blocks: 24 IO Block: 4096 regular file
Device: 803h/2051d Inode: 33615068 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-04-03 12:02:14.752816436 +0800
Modify: 2020-04-03 11:58:46.135806488 +0800
Change: 2020-04-03 12:01:56.091815546 +0800
Birth: - [root@qls ~]# sed -n '/root/p' passwd #过滤包含root的行 /号可以不能用别的符号替换
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# sed -n '/^root/p' passwd #过滤以root开头的行
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# sed -nr '/root|adm/p' passwd #过滤root或者adm的行 #扩展正则
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# sed -n '/root/p;/adm/p' passwd #过滤root或者adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# sed -n '/^root/,/adm/p' passwd #过滤以root开头的行到adm的行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@oldboy ~]# sed -nr '/^halt/,/1/p' passwd #过滤以root开头的行到下面1行
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin # 连续的行1个p,不连续的行2个p(引号最好都加上)(awk过滤最简单)--------------sed里面加了p,必须加 -n才有意义,加了-n,加p才有意义 2.删除 [root@qls ~]# sed '1d' passwd #删除第一行 [root@qls ~]# sed '$d' passwd #删除最后一行 [root@qls ~]# sed '1,20d' passwd #删除连续的多行 [root@qls ~]# sed '1d;20d' passwd #删除不连续的多行 [root@qls ~]# sed '/root/d' passwd #删除包含root的行 [root@qls ~]# sed -r '/root|adm/d' passwd #删除不连续的多行 /号可以不能用别的符号替换 [root@qls ~]# sed '/root/d;/adm/d' passwd #删除不连续的多行 [root@qls ~]# sed '/^root/,/adm/d' passwd #删除以root开头的行到包含adm的行 [root@qls ~]# sed '1,$d' passwd #删除所有 # 连续的行1个d,不连续的行多个个d(引号最好都加上),不用加g(awk 不能删除?)-------------- sed 删除最简洁 3.增 默认不是真正的追加或插入 -i 是真正的追加或插入
不加 -i 多次追加或插入无意义 ,加了 -i 可以多次重复追加 [root@qls ~]# sed '$aoldboy' sort.log #在文件的最后一行追加oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
[root@qls ~]# sed '1aoldboy' sort.log #在文件的第一行后面追加oldboy(1)
abc/1
oldboy
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2 [root@qls ~]# sed '1ioldboy' sort.log #在第一行的前面插入oldboy
oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@qls ~]# sed '$ioldboy' sort.log #在最后一行前面插入oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
oldboy
fgrf/2 [root@qls ~]# sed '1ioldboy\noldgirl' sort.log #插入多行
oldboy
oldgirl
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@qls ~]# sed '$aoldboy\noldgirl' sort.log #追加多行
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
oldgirl # 'Naxx\nxx' a追加,i插入,N行数,\n多行 4.替换 小弟是tr [root@qls ~]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# sed 's#root#oldboy#g' passwd #把所有的root替换为oldboy s 替换 g 全局 #号可以用别的符号替换 (先匹配root整个字符,然后再替换)(不能-n 可以任务是在默认输出的基础上进行的替换,再打印出默认输出)
oldboy:x:0:0:oldboy:/oldboy:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin [root@qls ~]# sed 's#root#oldboy#' passwd #替换每一行第一个匹配条件的
oldboy:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin [root@qls ~]# sed '10s#root#oldboy#g' passwd #针对 行 进行替换 (行s)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin [root@qls ~]# sed '10,11s#root#oldboy#g' passwd #操作多行替换
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
oldboy [root@qls ~]# sed '$s#root#oldboy#g' passwd #替换最后一行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy [root@qls ~]# sed '/^root/s#root#oldboy#g' passwd #替换以root开头的行中root替换为oldboy
oldboy:x:0:0:oldboy:/oldboy:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy [root@qls ~]# sed '/t$/s#root#oldboy#g' passwd #匹配以t为结尾的进行替换
root:x:0:0:root:/root:/bin/bash # 不能是$t--------
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
oldboy [root@oldboy ~]# cat passwd |sed 's#[0-9]#hhh#g' 先匹配,再替换
mm:x:hhhhhhhhhhhh:hhhhhhhhhhhh::/tmp/:/bin/bash # 把root替换为oldboy,可以认为是 边界递增匹配 再替换 [root@oldboy ~]# tr o 9 < passwd 替换,不是真正的替换
[root@oldboy ~]# tr -d o < passwd 删除,不是真正的删除 # 去重
[root@lb01 ~]# echo zzllss|sed -nr 's#(.)(.)#\1#gp'
zls
[root@lib02 ~]# echo nneettssttaatt|awk -F '' '{print $1$3$5$7$9$11$13}'
netstat
[root@lib02 ~]# echo nneettssttaatt|sed -nr 's#(.)(.)#\1#gp'
netstat

awk


awk
awk [选项] 动作 文件
-F #指定分割符[],默认是以 空白字符 为分隔符
"['']" 以空为分隔符,必须用引号把【】括起来 ,不能用【】(数空格),指定多个在一起的分隔符【】+
指定特殊符号的时候,[\"] 一定要转义 NR #表示行号(NR== ,NR>= ) Linux中一般都是用 == ,不能直接接$ 取最后一行 NF #表示每一行的列数 $NF #表示最后一列 ----不能NF$ $0 #整行内容(打印) $n #n是数字 表示取出哪一列 列-- && #并且 (行) || #或者 (行)
'|' #或者 (过滤) ! #排除 NR!= '!/root/' ’ #取出连续的 行----过滤 ; #多条命令分割 #取行
[root@qls ~]# awk 'NR==1' passwd #取出第一行
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# awk 'NR==1,NR==3' passwd #取出第一行到第三行(不能是NR==1,3 ,这样只能取第一列)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# awk 'NR==1;NR==3' passwd #取出第一行和第三行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@qls ~]# awk 'NR>10' passwd #取出大于10行的所有行的的内容
root
[root@qls ~]# awk 'NR<2' passwd #取出小于两行的内容
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# awk 'NR<=2' passwd #小于等于
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@qls ~]# awk 'NR>=10' passwd #大于等于
operator:x:11:0:operator:/root:/sbin/nologin
root [root@qls ~]# awk 'NR>=1 && NR<=10' passwd #取出大于等于第一行并且小于等于第十行 && 并且,两个条件都要满足 awk里面,> 只能用一种,不然会错误显示整个文件内容,,不能用,代替&&
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin [root@qls ~]# awk 'NR>0 && NR<11' passwd #取出大于等于第一行并且小于等于第十行 && 并且 不能用',' [root@qls ~]# awk 'NR<2 || NR>10' passwd #取出小于2行或者大于10行 || 或者,满足一个条件就可以 ,不能 '|'
root:x:0:0:root:/root:/bin/bash
root [root@oldboy ~]# awk 'NR==5 {print}' /etc/passwd {print}加不加都一样
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@oldboy ~]# awk 'NR==5' /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@oldboy ~]# cat /etc/passwd|awk 'NR==5'
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 理解,awk取行最简单,可以取数据或者数据流,,取多个不连续行的时候,必须加多个NR--一般的命令都可以处理数据或数据流wc tr more less head tail grep sort uniq--------------------------------- # 行号
[root@qls ~]# awk '{print NR,$0}' passwd #显示行号 ,必须要加'{}'
打印 行号 $0 表示每一行的整行内容
[root@oldboy ~]# cat passwd -n
[root@oldboy ~]# grep .* -n passwd 高亮显示 1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 root # 过滤 不需要加任何选项,直接过滤,支持基本正则和扩展正则 ,默认边界递增过滤
[root@qls ~]# awk '/root/' passwd #过滤出root的字符串
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root
[root@qls ~]# awk '/^root/' passwd #过滤出以root开头的字符串,过滤必须要加/ / ,也只能加/ / ,'' 号可以省略,'!/ /' 引号不能省略
root:x:0:0:root:/root:/bin/bash
root
[root@qls ~]# awk '/root$/' passwd #过滤出以root为结尾的字符串(不能是$n)
root
[root@qls ~]# awk '/root|adm/' passwd #过滤出root或者adm的字符串 '|'或者 不能用 (||,;)
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root [root@qls ~]# awk '/root/;/adm/' passwd #过滤出root或者adm的字符串
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root [root@qls ~]# awk '/adm/,/sync/' passwd #过滤以adm的行到sync的行
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 理解,awk 过滤注意格式 '/ /',边界递增过滤--/root$/--------------------------- # 取列,默认以空白字符(空格或TAB键)为分隔符,取多列的话可以 正反序
[root@qls ~]# awk 'BEGIN{FS=":"}{print $7}' passwd #取出文件的第七列,只能用双引号,不能用 ':' , 或 : ,
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin [root@qls ~]# awk -F: '{print $7}' passwd #取出文件的第七列, -F: 或 -F :(两个分隔符) 或 -F':' 或 -F":" 或 -F [:] 不能加{:} 最好加 -F '[]'
'{ }' 引号必须要加
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin [root@qls ~]# awk -F '[:]' '{print $7}' passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin [root@qls ~]# awk -F: '{print $NF}' passwd #取出文件中的每一行的最后一列,NF表示列,$NF表示最后一列,可以指定多个分隔符,格式是 '[: ]'
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
root 理解,注意可以指定多个分隔符,正反序--------------- [root@oldboy ~]# cat /oldboy/oldboy.txt | awk -F'[ ,"]+' '{print $3,$7}'
qiandao 1716141363 取出不连续的3和7列,不能用; [root@qls ~]# echo 'oldboy:123 oldgirl' >>passwd
[root@qls ~]# awk '{print $2}' passwd |tail -1
oldgirl
[root@qls ~]# awk -F: '{print $2}' passwd |tail -1
123 oldgirl
[root@qls ~]# awk -F '[: ]' '{print $2}' passwd |tail -1 #支持多个分隔符
123 #取出ip地址
[root@qls ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::c653:602a:38c6:e45 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:ae:0b:8a txqueuelen 1000 (Ethernet)
RX packets 3515748 bytes 5009905896 (4.6 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 382062 bytes 54939915 (52.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@qls ~]# ifconfig eth0 |awk 'NR==2'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@qls ~]# ifconfig eth0 |awk 'NR==2' |awk '{print $2}'
10.0.0.100
[root@qls ~]# ifconfig eth0 |awk 'NR==2{print $2}'
10.0.0.100
awk 默认前面的空格不存在,所以是'{print $2}',除非指定以空格为分隔符,才会像sed 一样,数空格,算列数(数那一堆) #取出ip地址
[root@qls ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:ae:0b:8a brd ff:ff:ff:ff:ff:ff
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::c653:602a:38c6:e45/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@qls ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]*' '{print $2}'
inet
[root@qls ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]*' '{print $3}'
10.0.0.100
[root@qls ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]' '{print $6}'
10.0.0.100
* 在基本正则里面表示所有的意思,在awk里面表示匹配0次或0次以上,代表一个整体
# 理解,awk不认识空格,除非指定了空格才会去数空格(数那一堆的) [root@qls ~]# awk 'NR!=1' passwd #排除第一列 (!排除,取反)(必须是NR!= )
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
root
oldboy:123 oldgirl
[root@oldboy ~]# awk '!NR=1' passwd
awk: cmd. line:1: !NR=1
awk: cmd. line:1: ^ syntax error
[root@oldboy ~]# awk 'NR=1!' passwd
awk: cmd. line:1: !NR=1!
awk: cmd. line:1: ^ syntax error [root@qls ~]# awk '!/root/' passwd #排除包含root的字符串-----相当于假删除
'/root/!' 报错
bin:x:1:1:bin:/bin:/sbin/nologin
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
oldboy:123 oldgirl
[root@qls ~]# # 理解,排除第一位----------------- [root@qls ~]# awk -F: '/^root/{print $NF}' passwd #取出满足以root开头的行并且打印出该行的最后一列,引号必须要加
/bin/bash
root
[root@qls ~]# awk -F: '/^root/{print $1,$2}' passwd #打印多列内容
root x
root [root@qls ~]# awk -F: '/^root/{print $3,$1}' passwd #把第三列和第一列倒着显示
0 root
root 12.在/etc/passwd文件中,以冒号分割字段,截取第三列包含数字5的行?#列和过滤混用
[root@oldboy ~]# awk -F "[:]+" '$3~/5/' /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin 14.使用命令调换 passwd 文件里 root 位置和/bin/bash 位置? 即将所有的第一列和最后一列位置调换?
[root@oldboy ~]# awk -F "[:]+" '{print $NF":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd 用$NF表示最后一列(可以用$7表示),小心修改重要文件,cat /etc/passwd,或者备份,注意真替换还是假 [root@oldboy Packages]# curl -s https://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/ |awk -F '[ "]+' '/rpm/{print $3}' 过滤 [root@oldboy ~]# seq 100|awk 'BEGIN{sum=0}{sum+=$1}END{print sum}'
5050
[root@oldboy ~]# seq 100|awk 'BEGIN{sum=-1}{sum+=$1}END{print sum}' 起始值,第几列什么动作
5049
[root@oldboy ~]# seq 100|awk 'BEGIN{s=0}{s+=$1}END{print s}'
5050
[root@oldboy ~]# seq 100|awk 'BEGIN{sum=0}{sum-=$1}END{print sum}'
5050 -F'' 以空分隔符,【】,以空为分隔符的时候,空格也要数,,外面用双引号,里面就用单引号。分隔符里有‘ “ ,那就要用tr 或者sed 替换了
[root@oldboy ~]# cat 1.txt 取18
my name is syy ,'18"\ years old ;QQ;\/'1757528181
[root@oldboy ~]# cat 1.1 | awk -F [\'\""] '{print $2}'
[root@oldboy ~]# cat 1.txt | tr ' " | awk -F ["] '{print $2}' awk不认识空格 , 【‘ ’ ,】可以拼出来空格 $1+$2$3+$4 前面用引号引起来,后面也要用引号引起来 (tr,cut)---前后一致性
[root@oldboy ~]# stat 2. | grep 0644 | sed -nr 's#.*s: \(0(.*)/-.*#\1#p'
注意转义括号(标点符号),小心贪婪匹配 # "['']" 以空为分隔符,必须用引号把 [] 括起来,不能是 ['']
[root@oldboy ~]# awk -F"['']" '{print $2}' kk
18"\ years old ;QQ;\/ # 指定特殊符号的时候,[\"] 一定要转义
[root@oldboy ~]# awk -F[\'\"] '{print $2}' kk
18

sed 和 awk的更多相关文章

  1. Sed、Awk单行脚本快速参考

    文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...

  2. sh脚本学习之: sh脚本 、sed、awk

    sh脚本 sh命令的批处理文件,支持更复杂的逻辑. Shell中的变量 参数 $0 当前脚本路径 $1....$n 脚本执行对应的第n个参数 条件判断 文件判断 test [op] path e存在 ...

  3. 一个利用sed和awk处理文本的小栗子

    这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...

  4. Pyp 替代sed,awk的文本处理工具

    Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...

  5. sed and awk学习笔记

    sed and awk 背景 awk起源追溯至sed和grep,进而追溯至共同的行编辑器ed.实用工具grep来源于ed命令:g/re/p .实用工具awk和sed有一个共同的选项-f用于指定脚本的名 ...

  6. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  7. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  8. sed和awk最佳入门教程

    文档<sed和awk最佳入门教程>——摘自<实战linux shell编程与服务器管理>,简单易懂,适合初学者. 下载地址:http://download.csdn.net/d ...

  9. grep、sed、awk、perl、js、vim等对正则表达式的支持的差别

    grep.sed.awk.perl等对正则表达式的支持的差别 grep 2.5.1 egrep 2.5.1 sed 3.02 sed 4.07 awk 3.1.1 perl 5.8.0 vim 6.1 ...

  10. 正则、grep、sed、awk

    每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正則表達式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则仅仅使用于支持这样的表示法的工具,如:vi,grep,se ...

随机推荐

  1. markdown中锚链接实现目录跳转以及注意事项

    当文章有分类,需要快速阅读,通常会先在文首部写一个目录,点击可以跳转. 为文章写目录,特别在文章较长的时候,有助于对内容的整体把握,能提高阅读效率. 以下,将写一个基本的锚目录demo,然后特别说明需 ...

  2. RMI 使用笔记

    Java 远程方法调用,即 Java RMI( Java Remote Method Invocation ) .顾名思义,可以使客户机上运行的程序能够调用远程服务器上的对象(方法). 下面主要介绍一 ...

  3. Jmeter压力测试笔记(6)性能调测-压力并发-模拟生产环境数据

    问题原因找到了,那就好办了. 找到阿里云技术人员,让他们强行给我们上架了一个共享代理模式的Redis. 并重新进行压力测试. 哦豁~ 开心,压力测试顺利,异常率大大降低实际为: 数据库DBA反馈,数据 ...

  4. 【php】面向对象(三)

    知识点关键词:FSCICATS一. f => final: a) 是一个修饰符,用来修饰类和成员方法 b) 使用final修饰符修饰的类不能被继承,使用final修饰符修饰的成员方法,不能被重写 ...

  5. spring boot 异步发送邮件

    发送邮件由于是一个耗时的操作,有可能需要一个几十秒的操作,但是呢,接口 是一个瞬间完成的,为了不影响接口的性能,所以需要对发送邮件的操作进行异步操作,我们这里呢,首先我们要引入发送邮件的测试模块. & ...

  6. Genetic CNN: 经典NAS算法,遗传算法的标准套用 | ICCV 2017

    论文将标准的遗传算法应用到神经网络结构搜索中,首先对网络进行编码表示,然后进行遗传操作,整体方法十分简洁,搜索空间设计的十分简单,基本相当于只搜索节点间的连接方式,但是效果还是挺不错的,十分值得学习 ...

  7. Python常见数据结构-推导式

    推导式是一种重要的Python特性,是一种简单精炼创建Python数据结构的方式. 列表推导式,详细参考https://www.jianshu.com/p/0a269715a742 基本格式为:[表达 ...

  8. Python爬虫 ---scrapy框架初探及实战

    目录 Scrapy框架安装 操作环境介绍 安装scrapy框架(linux系统下) 检测安装是否成功 Scrapy框架爬取原理 Scrapy框架的主体结构分为五个部分: 它还有两个可以自定义下载功能的 ...

  9. Kubernetes 二进制部署

    目录 1.基础环境 2.部署DNS 3.准备自签证书 4.部署Docker环境 5.私有仓库Harbor部署 6.部署Master节点 6.1.部署Etcd集群 6.2.部署kube-apiserve ...

  10. MAC 系统java开发环境搭建教程

    1.在安装JDK之前,先查看下自己电脑是否已经安装了JDK. 打开终端,输入java -version并回车.     从上图中可以看出我们已安装了,JDK 8.如果这个版本是你需要的版本,可直接看4 ...