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