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

最新文章

  1. ASP.NET Core 中文文档 第二章 指南(3)用 Visual Studio 发布一个 Azure 云 Web 应用程序
  2. 部署搭建 Saltstack(centos6.6)
  3. cas 登陆超时 解决方案
  4. C# 和Java的foreach的不同用法
  5. Spring (一) IOC ( Inversion Of Control )
  6. `DevOps`相关知识搜集
  7. HTTP协议形象展现
  8. [Swift]LeetCode529. 扫雷游戏 | Minesweeper
  9. drf信号量
  10. 【pycharm 警告】unittest RuntimeWarning: Parent module ” not found while handling absolute import
  11. linux、centos下安装配置vim
  12. win10 字体渲染优化 色彩调整
  13. HTML5 浏览器接收的常用 content-type
  14. [翻译]怎么写一个React组件库(一)
  15. Hyperledger Fabric CA User’s Guide——概述(二)
  16. Qt Creatror使用designer修改了界面但是编译无反应的解决方法
  17. 设计模式(一)简单工厂(创建型)(Java&amp;&amp;PHP)
  18. IIS站点/虚拟目录中访问共享目录(UNC)以及建立后的应用程序的信任级别问题
  19. [BZOJ]4650 优秀的拆分(Noi2016)(哈希+二分)
  20. 二、spring-boot-devtools热部署

热门文章

  1. STM32F103C8T6最小系统开发板原理图
  2. 《Three.js 入门指南》3.1.1 - 基本几何形状 -圆环面(TorusGeometry)
  3. PTA | 1056 组合数的和 (15分)
  4. 【数据库】MySQL数据库(五)
  5. Hadoop(八):YARN框架简介
  6. 微信小程序(黑马优购)完成!!{10天}
  7. django中写分页
  8. 小程序后台隐藏后 socket 无法重新连接
  9. Nginx如何来配置隐藏入口文件index.php(代码)
  10. spark——详解rdd常用的转化和行动操作