2018.11.7 第10次课及预习

课堂笔记:

8.10 shell特殊符号cut命令

  • cut 分割,-d 分隔符 -f 指定段号 -c 指定第几个字符
  • sort 排序, -n 以数字排序 -r 反序 -t 分隔符 -kn1/-kn1,n2
  • wc -l 统计行数 -m 统计字符数 -w 统计词
  • uniq 去重, -c统计行数
  • tee 和>类似,重定向的同时还在屏幕显示
  • tr 替换字符,tr 'a' 'b',大小写替换tr '[a-z]' '[A-Z]'
  • split 切割,-b大小(默认单位字节),-l行数

cut命令

  • cut命令用来截取某个字符串
  • 格式:cut –d “分割符” 文件名
  • -d:后面跟分割字符,分割字符用双引号括起来;
  • -f:后面跟接第几段字符串
  • -c:后面接第几个字符

截取第1到第3段

2018.11.7 第10次课及预习_第1张图片

截取第1段和第3段

2018.11.7 第10次课及预习_第2张图片

截取第2个字符

2018.11.7 第10次课及预习_第3张图片

截取第2个字符到第5个字符

2018.11.7 第10次课及预习_第4张图片

8.11 sort_wc_uniq命令

sort命令

  • sort命令用做排序,格式sort [-t 分割符] [-kn1,n2] [-nur],n1,n2指的是数字
  • -t 分割符
  • -k 按第几列排序;区间范围用逗号-k3,5
  • -n 按数字排序
  • -r 反序排序,按从打到小排序
  • -u 去重复
  • -un 字母开头的会识别成重复内容,如skj1 a weotj 都会认为是重复内容,只显示数字内容

sort 不加任何选项,从首行字符向后,依次按ASCII码值进行比较,按升序排序

2018.11.7 第10次课及预习_第5张图片

以数字排序

2018.11.7 第10次课及预习_第6张图片

注:如果有字母或者特殊符号,在数字排序中,都默认看成0.

反向排序

2018.11.7 第10次课及预习_第7张图片

去重复,这里把字母都看成了0,然后去重复。

wc命令

  • wc命令用于统计文档的行数,字符数,单词数。
  • -l 统计行数
  • -m统计字符数
  • -w统计单词数

查看文件3.txt 行数

2018.11.7 第10次课及预习_第8张图片

查看文件3.txt字符有多少个,$为行尾字符

2018.11.7 第10次课及预习_第9张图片

-w统计单词,它是以空格或者空白字符来分割。

2018.11.7 第10次课及预习_第10张图片

如果wc后面不加任何选项,直接跟文档,则会把行数,单词数,字符数依次输出。

uniq命令

  • uniq命令用来删除重复的行,通常和sort连在一起使用
  • -c选项比较常用,它表示统计重复的行数,并把行数写在前面

2018.11.7 第10次课及预习_第11张图片

先排序然后删除重复行

2018.11.7 第10次课及预习_第12张图片

8.12 tee_tr_split命令

tee命令

  • tee命令后面文件名,其作用类似于重定向>;但是它比重定向多一个显示在屏幕上的功能;

2018.11.7 第10次课及预习_第13张图片

  • tee –a 相当于追加重定向>>;它多了一个显示在屏幕上的功能

2018.11.7 第10次课及预习_第14张图片

命令tr

  • tr命令用于替换字符

2018.11.7 第10次课及预习_第15张图片

split命令

  • split 用于分割文档
  • split -l 按行来分割
  • split -b 按大小来分割
  1. split -b

2018.11.7 第10次课及预习_第16张图片

  1. split –l

2018.11.7 第10次课及预习_第17张图片

  • split 后面如果不指定文件名,则会以xaa,xab。。。这样的文件名来存取切割后的文件
  1. 指定目标分割文件名 为abc.

8.13 shell特殊符号下

  • $ 变量前缀,!$组合,正则里面表示行尾
  • ;多条命令写到一行,用分号分割
  • ~ 用户家目录,后面正则表达式表示匹配符
  • & 放到命令后面,会把命令丢到后台
  • 重定向 > 追加重定向>> 错误重定向2> 错误追加重定向2>> 正确和错误重定向&>
  • [ ] 指定字符中的一个,[0-9],[a-zA-Z],[abc]
  • || 和 && ,用于命令之间
  • $:可以作为变量前面的标示符,可以和!结合起来使用,在正则里面表示行尾

2018.11.7 第10次课及预习_第18张图片

  • ; 多条命令写在一行,用;分割

2018.11.7 第10次课及预习_第19张图片

  • ~ 家目录,后面正则表示匹配符
  • 重定向(正确) > ,会覆盖以前的内容

  • 追加重定向(正确)>>

  • 错误重定向 2>

  • 错误追加重定向 2>>

  • &> 错误和正确都重定向到某个文件里面。

2018.11.7 第10次课及预习_第20张图片

 

  • shell中的链接符号 && || ;
  • && 前面命令执行成功后,才会执行后面的命令;如果前面执行不成功,后面命令不执行
  • || 前面的命令执行不成功,才会执行后面的命令;如果前面命令执行成功,后面命令不执行
  • ; 左边的命令成功与否,后边的命令都会执行

扩展

关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command-environment-variables.html 

source exec 区别 http://alsww.blog.51cto.com/2001924/1113112

Linux特殊符号大全http://ask.apelearn.com/question/7720

sort并未按ASCII排序 http://blog.csdn.net/zenghui08/article/details/7938975

预习笔记

9.1 9.2 9.3 正则介绍_grep上、中、下

一、 grep

  • 正则就是一串有规律的字符串
  • 掌握好正则对于编写shell脚本有很大帮助
  • 各种编程语言中都有正则,原理是一样的
  • 本章将要学习grep/egrep、sed、awk

grep/egrep命令

  • grep命令:过滤出指定关键字的行;
  • 格式:grep [参数] ‘字符’ filename 
  • grep -n 显示符号要求的行,并显示行号
  • grep -c 打印符合要求的行数
  • grep -v 打印不符合要求的行,取反的意思
  • grep -r 会把目录下的所有文件全部遍历;-r针对的是目录,如果不加-r只能针对文件
  • grep -i 忽略大小写
  • grep -A2 打印符合要求的行以及下面两行
  • grep -B2 打印符合要求的行以及上面两行
  • grep -C2 打印符合要求的行以及上下两行
  • grep -w 匹配一个完整的单词
  • grep -E 特殊符号脱意==egrep
  • centos7中自带 --color显示颜色 ;
  • grep 跟特殊符号的话,要用单引号
  • grep --include 包含
  • grep -l 只打印出含有匹配字符串的文件名,不输出具体匹配行的数据

过滤出包含root字符的行。

grep –n 过滤出包含root的行,并显示行号;

test.txt中包含root字符的一共有几行。

过滤出不包含nologin的行;

2018.11.7 第10次课及预习_第21张图片

grep –i 不区分大小写

2018.11.7 第10次课及预习_第22张图片

grep –A2 打印符合要求的行以及下面两行;

2018.11.7 第10次课及预习_第23张图片

grep –B2 打印符合要求的行以及上面两行;

2018.11.7 第10次课及预习_第24张图片

grep –C2 打印符合要求的行以及这行上下各两行;

2018.11.7 第10次课及预习_第25张图片

 

grep/egrep示例:

  • grep -n 'root' test.txt
  • grep -nv 'nologin' test.txt
  • grep '[0-9]'/etc/inittab
  • grep -v '[0-9]'/etc/inittab
  • grep -v '^#' /etc/inittab
  • grep -v '^#' /etc/inittab|grep -v '^$'
  • grep '^[^a-zA-Z]' test.txt 
  • grep 'r.o' test.txt
  • grep 'oo*' test.txt
  • grep '.*' test.txt
  • grep 'o{2}' /etc/passwd
  • egrep 'o{2}' /etc/passwd
  • egrep 'o+' /etc/passwd
  • egrep 'oo?' /etc/passwd
  • egrep 'root|nologin' /etc/passwd
  • egrep '(oo){2}' /etc/passwd
  • [0-9]:这里的方括号,表示方括号里面的任意一个字符;只要有一个数字,不管是几,就算符合要求。

过滤出包含数字的行 ; grep '[0-9]' test1.txt

2018.11.7 第10次课及预习_第26张图片

过滤出所有不包含数字的行; grep -nv 'nologin' test.txt

过滤出不以#开头的行,方便查看某个文件的配置

2018.11.7 第10次课及预习_第27张图片

过滤出不以#或者开头的行不包括空行

过滤出不以字母开头的行

2018.11.7 第10次课及预习_第28张图片

过滤出不包含特殊符号的行

2018.11.7 第10次课及预习_第29张图片

正则里面的特殊符号

  • 1 . 表示 任意一个字符
  • 2 * 表示 零个或多个前面的字符
  • 3 .* 表示零个或多个任意字符,空行也包含在内;以r开头o结尾。
  • 4 ? 表示0个或者1个前面的字符,使用的时候要\ 脱意一下
  • 5 + 表示一个或者多个+前面的字符
  • 6 | 在正则表达式里面表示或者,可以写多个,是特殊符号,要使用脱意 或者-E 或者 egrep

9.4/9.5 sed

  • sed命令比grep更强大,除了拥有查找功能外,还拥有替换功能
  • sed命令格式:sed -n 'n'p filename ,单引号内的n是数字,表示第几行;
  • sed 可以实现grep的大部分功能 ,但是不显示颜色
  • sed -n 是打印符合条件的行,p是print打印的意思
  • sed -r 脱义(去除特殊符号本身的意义,使其代表特殊意义)
  • sed -e 进行多次命令,和;效果一行
  • sed '/[0-9]'d 2.txt d表示删除不包含数字的行;不是真正的删除,是不显示,相当于grep -v 取反
  • sed -n '/root/'Ip I 不区分大小写
  • sed -i ' [0-9]'d 2.txt -i 是真正删除掉文档里面不包含数字的行;一半不建议使用。
  • 正则中 | 表示或者,并且要sed两次表示
  • sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' 1.txt 以:为分割符,将第一段和最后一段互相替换,\1表示第一个()内容,\2表示第二个()内容,\3表示第三个内容。
  • sed -r 's/(.*)/aaa:&/g' 1.txt

sed实例1:

  • sed -n '5'p test.txt
  • sed -n '1,5'p test.txt
  • sed -n '1,$'p test.txt
  • sed -n '/root/'p test.txt
  • sed -n '/^1/'p test.txt
  • sed -n 'in$'p test.txt
  • sed -n '/r..o/'p test.txt
  • sed -n 'oo*'p test.txt
  • sed -e '1'p -e '/111/'p -n test.txt

查找指定行

  1. 打印第5行;

  1. 打印第1-5行;

2018.11.7 第10次课及预习_第30张图片

  1. 打印全部内容可以用(1,$)表示;内容太多,就不显示全部内容。

2018.11.7 第10次课及预习_第31张图片

查找指定字符串的行

  1. 查找带有root字符的行;字符要用/ /括起来。

  • 查询的内容也可以是正则;
  1. 查找以l开头的行

  1. 查找以/login结尾的行;注意:这里需要将/login前面的/脱意一下。

  1. 查找包含r.o

  1. 打印带有数字的行

2018.11.7 第10次课及预习_第32张图片

  1. 打印以数字开头的行

  1. sed –e 可以进行多次命令;

删除某些行

sed实例2:

  • sed '1'd test.txt
  • sed '1,3'd test.txt
  • sed '/oot/'d test.txt
  1. 删除第1行2018.11.7 第10次课及预习_第33张图片
  2. 删除第1-3行

2018.11.7 第10次课及预习_第34张图片

  1. 删除带有ab字符的行

2018.11.7 第10次课及预习_第35张图片

sed替换功能

  • sed 's/[0-9]/a/g' 1.txt //将所有数字替换成a
  • sed 's/root/ROOT/g' 1.txt //将文件1.txt中root全部换成ROOT
  • sed '1,10s/root/ROOT/g' 1.txt //将文件1.txt前10行中root全部替换成ROOT
  • paste 1.txt 2.txt //将1.txt的内容和2.txt内容连在一起
  • sed -i '30,40s/^.*$/#&/g' 1.txt //前面加入加上#注释掉
  • sed -i 's/^/#/g' 1.txt //前面加入加上#注释掉
  • s 是替换的意思,g为全局替换,否者就替换一次,/可以用#@来替换字符

sed实例3:

  • sed '1,2s/ot/to/g' test.txt
  • sed 's#ot#to#g' test.txt
  • sed 's/[0-9]//g' test.txt
  • sed 's/[a-zA-Z]//g' test.txt
  • sed -r 's/(rot)(.*)(bash)/\3\2\1/' test.txt
  • sed 's/^.*$/123&/' test.txt
  • sed -i 's/ot/to/g' test.txt
  1. 将1到2行中ot替换成to

2018.11.7 第10次课及预习_第36张图片

  1. /可以用#或者@来替换

2018.11.7 第10次课及预习_第37张图片

  1. 将数字全部删除

2018.11.7 第10次课及预习_第38张图片

  1. 只保留数字

2018.11.7 第10次课及预习_第39张图片

  1. 删除所有字母

2018.11.7 第10次课及预习_第40张图片

  1. 以:为分割,将第一段和最后一段调换位置;+ 在里面是特殊符号,要脱意 用 -r

2018.11.7 第10次课及预习_第41张图片

2018.11.7 第10次课及预习_第42张图片

  1. ;分号可以进行多次匹配

  1. -e 进行多次命令,和;效果一行

  1. 在每一行前面加上aaa: &表示前面()的内容

2018.11.7 第10次课及预习_第43张图片

\1 表示前面()的内容

2018.11.7 第10次课及预习_第44张图片

  1. -i 会直接更改文件本身的内容

2018.11.7 第10次课及预习_第45张图片

9.6/9.7 awk

  • awk也是流式编辑器,针对文档中的行和段进行操作 awk可以分为几个部分:
  • 匹配字符或者字符串
  • 截取文档中的某一段
  • 条件操作符
  • 数学运算
  • 内置变量

实例1:

  • head -n2 test.txt|awk -F ':' '{print $1}'
  • head -n2 test.txt|awk -F ':' '{print $0}'
  • awk -F ':' '{print $1"#"$2"#"$3"#"$4}'
  • awk '/oo/' test.txt
  • awk -F ':' '$1 ~/oo/' test.txt
  • awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt
  • awk -F ':' '$3=="0"' /etc/passwd
  • awk -F ':' '$3>="500"' /etc/passwd
  • awk -F ':' '$3>=500' /etc/passwd
  • awk -F ':' '$7!="/sbin/nologin"' /etc/passwd

匹配字符或者字符串

匹配root的行

 awk可以做到匹配某一段中的某个字符,以:分隔,匹配第一段中带有root的行

awk匹配字符可以使用正则

2018.11.7 第10次课及预习_第46张图片

awk自带脱意功能,grep脱意需要-E或者egrep,sed脱意需要-r选项

2018.11.7 第10次课及预习_第47张图片

grep -E

2018.11.7 第10次课及预习_第48张图片

sed –r

2018.11.7 第10次课及预习_第49张图片

 

截取文档中的某一段

  • awk –F '分隔符' 如果不指定分隔符,默认会以空格或者空白字符分隔。

打印第一段

2018.11.7 第10次课及预习_第50张图片

打印全部内容;$0表示全部内容

2018.11.7 第10次课及预习_第51张图片

打印第1段~第4段

2018.11.7 第10次课及预习_第52张图片

  • 注意:这里打印出来了第1到第4段,但是内容没有分隔符,这里我们加个分隔符,分隔符要以双引号引起来;后面我们会介绍一个变量OFS来进行分隔。

2018.11.7 第10次课及预习_第53张图片

  • awk可以支持多个匹配

匹配到root打印第1和第3段,匹配到user打印第1,第3,第4段。

2018.11.7 第10次课及预习_第54张图片

  • |在正则里面表示或者

打印出匹配到root或者user的行

2018.11.7 第10次课及预习_第55张图片

||也是并且的意思,但是用法还是有一点区别。

2018.11.7 第10次课及预习_第56张图片

条件操作符

  • == 等于,精确匹配
  • >大于
  • >= 大于等于
  • < 小于
  • <= 小于等于
  • != 不等于

打印出第3段等于0的行

打印出第3段大于等于500的行

2018.11.7 第10次课及预习_第57张图片

注意'500'和"500"区别:双引号引起来的500会把它当成字符,会按照阿斯玛排序,单用号引起来的500是数字。

2018.11.7 第10次课及预习_第58张图片

打印出第7段不/sbin/nologin的行

2018.11.7 第10次课及预习_第59张图片

并且&&和或者||

 

2018.11.7 第10次课及预习_第60张图片

或者||

2018.11.7 第10次课及预习_第61张图片

两个字段进行运算

2018.11.7 第10次课及预习_第62张图片

awk内置变量

  • awk常用的变量有OFS,NR和NF
  • OFS 用来指定分隔符号
  • NR 表示行数
  • NF 表示段数

指定#为分隔符

2018.11.7 第10次课及预习_第63张图片

用awk打印前5行,并显示行号

2018.11.7 第10次课及预习_第64张图片

用awk打印20行以后的行,并显示行号

2018.11.7 第10次课及预习_第65张图片

awk中可以使用if判断

2018.11.7 第10次课及预习_第66张图片

awk中的数学运算

  • awk可以更改段值

将第一段全部更改为root

2018.11.7 第10次课及预习_第67张图片

  • awk可以计算某个段的值

求第3段和

打印出第一段是root的行

 

 

 

 

你可能感兴趣的:(2018.11.7 第10次课及预习)