第十一课预习笔记

9.1-9.3 正则介绍_grep

什么是正则

正则就是一串有规律的字符串。

百度百科:正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

学习好正则对于编写shell脚本有很大帮助;

各种编程语言中都有正则,原理一样;

1、grep命令

grep命令用于查找文件里符合条件的字符串。

参数:

  • -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一行之外,并显示该行之下的内容。
  • -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之上的内容。
  • -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行上下的内容。
  • -i 或 --ignore-case : 忽略字符大小写的差别。
  • -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
  • -r 或 --recursive : 遍历目录及其子目录。
  • -v 或 --revert-match : 显示不包含匹配文本的所有行。
  • -c 或 --count : 计算符合样式的行数有多少。

直接用grep查找,没有参数;在CentOS7版本中grep是有 --color=auto参数的。

[root@liang-00 grep]# which grep
alias grep='grep --color=auto'
    /usr/bin/grep
[root@liang-00 grep]# 

-n参数,标出行号;-c参数,统计符合条件的总行数。

-i参数,不区分大小写。

-v参数,取反查找。

[root@liang-00 grep]# grep -iv 'nologin' passwd    #反向查找不带nologin的行。
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
liang:x:1000:1000::/home/liang:/bin/bash
[root@liang-00 grep]#

-r级联遍历目录及子目录查找,在这里我先创建了 ./r_grep 目录,然后把 ./passwd里一部分内容复制到 ./r_grep/r_passwd文件内。

-A后面跟数字n,过滤除符合要求的行以及面n行;

-B后面跟数字n,过滤除符合要求的行以及面n行;

-C后面跟数字n,过滤除符合要求的行以及上下n行

[root@liang-00 grep]# grep -A2 'halt' passwd 
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@liang-00 grep]#
[root@liang-00 grep]#
[root@liang-00 grep]# grep -B2 'halt' passwd 
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[root@liang-00 grep]#
[root@liang-00 grep]#
[root@liang-00 grep]# grep -C2 'halt' passwd 
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

‘[0-9]’ 查找含有0-9任意数字的行。

‘^#’ 以#开头的行,‘^o’ 以o开头的行。

‘[^0-9]’ 表示不包含数字的行,‘^[^0-9]’ 如果是这样,表示不是以数字开头的行。

^ 放到方括号外边表示以什么开头,放到方括号里面表示匹配不含什么的行。

‘r.o’ 其中 . 表示匹配一个任意字符(空格也算)。

‘o*o’ 表示*号左边的字符重复零到多次

‘.*’ 表示匹配任意字符任意次数,包括空行。

‘o\{0,3\}’ 表示匹配 o 零到三次。

有三种方法都可以实现。

1、grep    ‘o\{0,3\}’    passwd

2、grep    -E    ‘o{0,3}’    passwd

3、egrep    ‘o{0,3}’    passwd

‘o\+o’ 表示+号左边的字符重复一次到多次

‘o\?o’ 表示?前的字符匹配零次到一次。

A|B 竖线,匹配A或B。

9.4 sed

sed命令是利用script来处理文本文件。sed可依照script的指令,来处理、编辑文本文件。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed 可以实现 grep 的一些功能。

sed在匹配字符时要写在 / / 内。

如果用到 + ? 等字符匹配要加 -r 选项或者用 \ 脱译。

sed    -n    '2'p    passwd 打印第二行。

sed    -n    ‘2,6’p    passwd 打印二到六行。

sed    -n    ‘15,$’p    passwd 打印第15到最后一行。

-e 选项 在一个表达式中做多个匹配

[root@liang-00 sed]# sed -e '1'p -e '/bus/'p -n passwd    #不要忘了-n 
root:x:0:0:root:/root:/bin/bash
dbus:x:81:81:System ooomessage bus:/:/sbin/nologin
[root@liang-00 sed]# 

当匹配的行相同时,sed中有如果多个匹配同时匹配了同一行,那么匹配了多少次就打印几行。

[root@liang-00 sed]# sed -e '1'p -e '/root/'p -n passwd 
root:x:0:0:root:/root:/bin/bash                            #root匹配了两次,就打印两次。
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@liang-00 sed]# 

sed中用 I 来不分大小写都匹配。

 

需求:对服务器上一个非常大的日志文件(可能超过几十个G),就可以用sed删除。首先用 grep 定位时间戳(比如说1月到6月的日志,我们把时间定位到5月31日,然后把之前的日志用 sed 全部删除)

1)、用grep定位:grep    -n    ‘时间戳’    日志文件    #匹配出来有n行

2)、用sed    -n    ‘1,n’d    日志文件                           #删除1到n行

sed 删除指定行;-i 对文件本身进行操作。

[root@liang-00 sed]# sed  '1,15'd passwd    #删除1到15行,没有对文件本身操作。 
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
liang:x:1000:1000::/home/liang:/bin/bash
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
adasdasf...BUS
[root@liang-00 sed]# cp passwd passwd-
[root@liang-00 sed]# sed -i '1,15'd passwd        #删除1到15行,直接对文件本身操作。
[root@liang-00 sed]# cat passwd
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
liang:x:1000:1000::/home/liang:/bin/bash
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
adasdasf...BUS
[root@liang-00 sed]# 

对含有匹配字符的行进行删除操作。

sed替换:这与vim中的替换有点类似,‘n1,n2s/word1/word2/g’

[root@liang-00 sed]# sed '1,10s/root/toor/g' passwd 
toor:x:0:0:toor:/toor:/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:rhohsbin:/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:/toor:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nooooooobody:/:/sbin/NOLOGIN
systemd-network:x:oo192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System ooomessage bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
liang:x:1000:1000::/home/liang:/bin/bash
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
adasdasf...BUS
[root@liang-00 sed]# 

sed替换中是可以用正则表达式的,遇到+ ? ( )  {} 等需要脱译或者加 -r 选项。

[root@liang-00 sed]# sed -r '1,10s/ro+/r/g' passwd 
rt:x:0:0:rt:/rt:/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:rhohsbin:/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:/rt:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nooooooobody:/:/sbin/NOLOGIN
systemd-network:x:oo192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System ooomessage bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
liang:x:1000:1000::/home/liang:/bin/bash
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
adasdasf...BUS

把passwd文件前十行中用 “:” 分割成7段的第一段和最后一段位置互换。

[root@liang-00 sed]# head passwd |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/'    #
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/NOLOGIN:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:rhohsbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator

把passwd文件中的第一个字符和最后一个字符互换。

[root@liang-00 sed]# head passwd |sed -r 's/(^.)(.*)(.$)/\3\2\1/'
hoot:x:0:0:root:/root:/bin/basr
nin:x:1:1:bin:/bin:/sbin/nologib
naemon:x:2:2:daemon:/sbin:/sbin/nologid
ndm:x:3:4:adm:/var/adm:/sbin/nologia
Np:x:4:7:lp:/var/spool/lpd:/sbin/NOLOGIl
cync:x:5:0:sync:rhohsbin:/bin/syns
nhutdown:x:6:0:shutdown:/sbin:/sbin/shutdows
talt:x:7:0:halt:/sbin:/sbin/halh
nail:x:8:12:mail:/var/spool/mail:/sbin/nologim
nperator:x:11:0:operator:/root:/sbin/nologio

替换含有 / 特殊字符的内容。

[root@liang-00 sed]# head passwd |sed 's/\/root/----/'     第一种方法:直接脱译 / 。
root:x:0:0: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:rhohsbin:/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:----:/sbin/nologin
[root@liang-00 sed]# head passwd |sed 's#/root#----#'     #第二种方法:改换分隔符,把/换成#或者@。
root:x:0:0: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:rhohsbin:/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:----:/sbin/nologin

把passwd文件前十行中所有字母删除掉。

把passwd文件的所有行最前面添加字符串。

sed中&符号表示:前面要替换的内容的格式。

9.6 awk

awk工具功能比grep、sed更加复杂。

-F选项 指定分隔符,打印出第一段,{print    $1},操作不会更改文本内容。

[root@liang-00 awk]# awk -F ':' '{print $1}' test.txt 
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
chrony
liang
nginx
[root@liang-00 awk]# 

{print    $1,$2,$3}

{print    $0} 打印所有段;默认情况下awk分隔符为“空格”。

awk指定打印后的分隔符,{print    $1"#"$2"#"$3}

[root@liang-00 awk]# head -n5 test.txt |awk -F ':' '{print $1"#"$2"#"$3}'
root#x#0
bin#x#1
daemon#x#2
adm#x#3
lp#x#4
[root@liang-00 awk]# 

awk匹配字符

awk打印指定段匹配某字符的行。

[root@liang-00 awk]# head test.txt |awk -F ':' '$1 ~ /oo/'     #打印第一段包含oo的行。
root:x:0:0:root:/root:/bin/bash
[root@liang-00 awk]# 

awk同样可以使用正则表达式,且不用加脱译字符。

[root@liang-00 awk]# head test.txt |awk -F ':' '$1 ~ /o+/'     #打印第一段包含一个到多个o的行。
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
operator:x:11:0:operator:/root:/sbin/nologin
[root@liang-00 awk]# 

awk多个表达式同时使用。

[root@liang-00 awk]# awk -F ':' '/root/ {print $1,$3} /liang/ {print $1,$3,$4}' test.txt 
root 0
operator 11
liang 1000 1000
[root@liang-00 awk]# 
[root@liang-00 awk]# awk -F ':' '/root|liang/ {print $1,$2}' test.txt 
root x
operator x
liang x
[root@liang-00 awk]# 

awk打印==的段。“==”表示等于,“=”表示赋值。

[root@liang-00 awk]# awk -F ':' '$3==1000 {print $1,$3}' test.txt    #等于1000
liang 1000
[root@liang-00 awk]# awk -F ':' '$3>=1000 {print $1,$3}' test.txt    #大于1000
liang 1000
[root@liang-00 awk]# awk -F ':' '$3<=1000 {print $1,$3}' test.txt    #小于1000 
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-network 192
dbus 81
polkitd 999
sshd 74
postfix 89
chrony 998
liang 1000
nginx 997
[root@liang-00 awk]# awk -F ':' '$3!=1000 {print $1,$3}' test.txt    #不等于1000 
[root@liang-00 awk]# awk -F ':' '$3=="1000" {print $1,$3}' test.txt    #数字带双引号表示字符串的值。 
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-network 192
dbus 81
polkitd 999
sshd 74
postfix 89
chrony 998
nginx 997
[root@liang-00 awk]# 

awk打印第七段不等于 /sbin/nologin 的行。

awk 两个字段进行比较。

[root@liang-00 awk]# awk -F ':' '$3<$4' test.txt 
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

[root@liang-00 awk]# awk -F ':' '$3==$4' test.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
liang:x:1000:1000::/home/liang:/bin/bash
[root@liang-00 awk]# 

awk 中 && 和 || 符号使用,&&表示并且关系;||表示或者关系。

[root@liang-00 awk]# awk -F ':' '$3>"5" && $3<"7"' test.txt 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@liang-00 awk]# 

[root@liang-00 awk]# awk -F ':' '$3>500 || $7=="/sbin/nologin"' test.txt 
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
liang:x:1000:1000::/home/liang:/bin/bash
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
[root@liang-00 awk]# 

awk中OFS指定打印出字段的分隔符。

[root@liang-00 awk]# awk -F ':' '{OFS="#"} $3>500 || $7 ~ /bash/ {print $1,$3,$5}' test.txt 
root#0#root
polkitd#999#User for polkitd
chrony#998#
liang#1000#
nginx#997#Nginx web server
[root@liang-00 awk]# 

awk中用 if 来表示满足打印字段的条件。

[root@liang-00 awk]# awk -F ':' '{OFS="#"} {if ($3>500) {print $1,$3,$5}}' test.txt 
polkitd#999#User for polkitd
chrony#998#
liang#1000#
nginx#997#Nginx web server
[root@liang-00 awk]# 

awk中用 NR 表示行 NF表示段。

[root@liang-00 awk]# awk -F ':' '{print NR":"$0}' test.txt    #表示打印出所有行带行号。 
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:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
18:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
19:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
20:liang:x:1000:1000::/home/liang:/bin/bash
21:nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
[root@liang-00 awk]# 
[root@liang-00 awk]# awk -F ':' '{print NF":"$0}' test.txt    #打印出每行有多少段。 
7:root:x:0:0:root:/root:/bin/bash
7:bin:x:1:1:bin:/bin:/sbin/nologin
7:daemon:x:2:2:daemon:/sbin:/sbin/nologin
7:adm:x:3:4:adm:/var/adm:/sbin/nologin
7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
7:halt:x:7:0:halt:/sbin:/sbin/halt
7:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
7:operator:x:11:0:operator:/root:/sbin/nologin
7:games:x:12:100:games:/usr/games:/sbin/nologin
7:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
7:nobody:x:99:99:Nobody:/:/sbin/nologin
7:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
7:dbus:x:81:81:System message bus:/:/sbin/nologin
7:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
7:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
7:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
7:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
7:liang:x:1000:1000::/home/liang:/bin/bash
7:nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin
[root@liang-00 awk]# 

awk打印文件的前十行。

[root@liang-00 awk]# awk -F ':' 'NR<=10' test.txt 
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@liang-00 awk]# 

awk打印文件前十行中满足一定条件的行。

[root@liang-00 awk]# awk -F ':' 'NR<=10 && $1 ~ /root|halt/' test.txt 
root:x:0:0:root:/root:/bin/bash
halt:x:7:0:halt:/sbin:/sbin/halt
[root@liang-00 awk]# 

awk中用 $NR和$NF 打印每行行号所在的段和最后一段

awk 给段赋值。

[root@liang-00 awk]# head -n3 test.txt |awk -F ':' '{OFS="#"} $1="root"'
root#x#0#0#root#/root#/bin/bash
root#x#1#1#bin#/bin#/sbin/nologin
root#x#2#2#daemon#/sbin#/sbin/nologin
[root@liang-00 awk]# 

awk中的循环

撰写本博客所用到的参考文献:

http://man.linuxde.net
http://www.runoob.com/
http://ask.apelearn.com
https://www.baidu.com/
https://www.google.com

转载于:https://my.oschina.net/u/3993922/blog/2874402

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值