009day--grep和sed作业及awk作业

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了009day--grep和sed作业及awk作业相关的知识,希望对你有一定的参考价值。

一、grep作业

-n:显示行号

-o:只显示匹配的内容

-q:静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

-l:如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl ‘root‘ /etc 

-A:如果匹配成功,则将匹配行及其后n行一起打印出来

-B:如果匹配成功,则将匹配行及其前n行一起打印出来

-C:如果匹配成功,则将匹配行及其前后n行一起打印出来

-c:如果匹配成功,则将匹配到的行数打印出来

-E:等于egrep,扩展

-i
:忽略大小写

-v:取反,不匹配

-w匹配单词

正则表达式及字符处理

目标文件/etc/passwd,使用grep命令或egrep

1.显示出所有含有root的行:

egrep "root" /etc/passwd
2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:

egrep -C 2 "bash" /etc/passwd
3. 显示出有多少行含有nologin。

egrep -c "nologin" /etc/passwd

4.显示出那些行含有root,并将行号一块输出。

egrep -n "nologin" /etc/passwd

5.显示出文件中

6.新建用户
abominable
abominate
anomie
atomize

编写正则表达式,将他们匹配出来

egrep "a.omi(nabl|nat|z|)e" /etc/passwd

7.建四个用户
Alex213sb
Wpq2222b
yH438PIG
egon666 egon

过滤出用户名组成是字母+数字+字母的行

egrep ‘^[a-Z]+[0-9]+[a-Z]+‘ /etc/passwd

8.显示出/etc目录下所有包含root的文件名

egrep -rl "/root" /etc

9. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行

grep -v ‘^#‘ /etc/ssh/sshd_config |grep -v ‘^ *$‘

二、Sed作业:以/etc/passwd文件为模板

1,删除文件每行的第一个字符。

sed -r ‘s/^(.)(.*)/\\2/‘ /etc/passwd 2,删除文件每行的第二个字符。

sed -r ‘s/^(.)(.)(.*)/\\1\\3/‘ /etc/passwd 3,删除文件每行的最后一个字符。

sed -r ‘s/(.*)(.)$/\\1/‘ /etc/passwd 4,删除文件每行的倒数第二个字符。

sed -r ‘s/(.*)(.)(.)$/\\1\\3/‘ /etc/passwd 5,删除文件每行的第二个单词。

sed -r ‘s/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/\\1\\2\\4/‘ /etc/passwd 6,删除文件每行的倒数第二个单词。

sed -r ‘s/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)$/\\1\\3\\4/‘ /etc/passwd 7,删除文件每行的最后一个单词。

sed -r ‘s/([^a-Z]+)([a-Z]+)$/\\1/‘ /etc/passwd 8,交换每行的第一个字符和第二个字符。

sed -r ‘s/^(.)(.)(.*)/\\2\\1\\3/‘ /etc/passwd 9,交换每行的第一个字符和第二个单词。

sed -r ‘s/^(.)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/\\4\\2\\3\\1\\5/‘ /etc/passwd 10,交换每行的第一个单词和最后一个单词。

sed -r ‘s/^([a-Z]+)([^a-Z]+)(.+)([^a-Z]+)([a-Z]+)$/\\5\\2\\3\\4\\1/‘ /etc/passwd 11,删除一个文件中所有的数字。

sed -r ‘s/[0-9]+//g‘ /etc/passwd 12,删除每行开头的所有空格。

sed -r ‘s/^ *//g‘ /etc/passwd 13,用制表符替换文件中出现的所有空格。

sed -r ‘s/ /\\t/g‘ /etc/passwd 14,把所有大写字母用括号()括起来。

sed -r ‘s/[A-Z]/(&)/g‘ /etc/passwd 15,打印每行3次。

sed ‘p;p‘ /etc/passwd 16,隔行删除。

sed ‘1~2d‘ /etc/passwd 17,把文件从第2行到第5行复制到第7行后面。(选做题)

sed ‘1h;3,5H;7G‘ test 18,把文件从第2行到第5行移动到第7行后面。(选做题)

sed ‘2h;3,5H;7G‘ test 19,只显示每行的第一个单词。

sed -r ‘s/^([a-Z]+)([^a-Z]+)(.*)$/\\1/‘ /etc/passwd 20,打印每行的第一个单词和第三个单词。

sed -r ‘s/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)$/\\1\\ \\5/‘ /etc/passwd

三、awk作业
打印uid在30~40范围内的用户名。

awk -F: ‘$3>29&&$3<41{print $1}‘ /etc/passwd
打印第5-10行的行号和用户名

awk -F: ‘NR>4&&NR<11{print $1,NR}‘ etc/passwd
打印奇数行

awk -F: ‘NR%2{ print NR,$0}‘ /etc/passwd
打印偶数行

awk -F: ‘!(NR%2){print NR,$0}‘ /etc/passwd
打印字段数大于5的行

awk -F: ‘NF>5{print NR,$0}‘ /etc/passwd
打印UID不等于GID的用户名

awk -F: ‘$3!=$4{print NR,$1}‘ /etc/passwd


资料来源:http://www.cnblogs.com/linhaifeng/p/6596660.html#_label3














以上是关于009day--grep和sed作业及awk作业的主要内容,如果未能解决你的问题,请参考以下文章

lesson009 lesson010 作业

009 分支与循环-小甲鱼课后作业

8.6-8.9 管道符和作业控制shell变量,环境变量

管道符和作业控制 shell变量 环境变量配置文件

shell第三天作业

linux笔记(28)sed和awk的联系及拓展