Linux-Shell脚本和RE

这里介绍ubuntu中shell脚本的相关基本知识即正则表达式的用法

1、记录命令历史

我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。

与命令历史有关的有一个有意思的字符那就是”!”了。常用的有这么几个应用:(1)!! (连续两个”!”),表示执行上一条指令;(2)!n(这里的n是数字),表示执行命令历史中第n条指令,例如”!100”表示执行命令历史中第100个命令;(3)!字符串(字符串大于等于1),例如!ta,表示执行命令历史中最近一次以ta为开头的指令。

2、管道

在处理数据时,需要经过几个步骤才能得到最终的数据,后面的命令需要用到前面命令输出的数据,这里就需要用到管道,管道符为|
用法:
command | command | command
例:last | grep Fri 在last数据中查找含有Fri的行信息
ls -l | less 以less模式来阅读ls中的信息

3、管道命令

cut: 对数据进行分解,截取某一个字段
语法:cut -d “分隔字符” [-cf] n 这里的n是数字

-d :后面跟分隔字符,分隔字符要用双引号括起来
-c :后面接的是第几个字符
-f :后面接的是第几个区块

例:ubuntu@ubuntu:~/Documents$ cat test4.text | cut -d ” ” -f1

sort :用做排序

语法:sort [-t 分隔符] [-kn1,n2] [-nru] 这里的n1 < n2
-t 分隔符 :作用跟cut的-d一个意思
-n :使用纯数字排序
-r :反向排序
-u :去重复
-kn1,n2 :由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序

wc :统计文档的行数、字符数、词数,常用的选项为:
-l :统计行数
-m :统计字符数
-w :统计词数

uniq :去重复的行
-c :统计重复的行数,并把行数写在前面
-d:仅显示重复的行
-u:仅显示不重复的行
例:ubuntu@ubuntu:~/Documents$ cat test4.text | sort | uniq
删除重复的行,前提是先排序

tee:将数据写入文件
-a: 写到文件尾部;默认从头开始写,会覆盖原有数据
-i: 忽略中断
例:ubuntu@ubuntu:~/Documents$ echo “nihaoa” | tee test1.text -a

tr:删除字符
tr -d “ ” :删除字符
tr -s “ ” “ ”:后面的字符代替前面的字符
例:
ubuntu@ubuntu:~/Documents$ cat test1.text | tr -d “a”

ubuntu@ubuntu:~/Documents$ cat test1.text | tr -s “a” “b”

split:分割文件
-l: 以行数来分
-b :以文件大小来分
例:ubuntu@ubuntu:~/Documents$ split -l 1 test1.text
会自动生成分割后的几个文件

4、多条命令

平时我们都是在一行中敲一个命令,然后回车就运行了,那么想在一行中运行两个或两个以上的命令如何呢:
1、command1 ; command2
2、command1 && command2
3、command1 || command2

使用”;”时,不管command1是否执行成功都会执行command2; 使用”&&”时,只有command1执行成功后,command2才会执行,否则command2不执行;使用”||”时,command1执行成功后command2 不执行,否则去执行command2,总之command1和command2总有一条命令会执行。也可以用-a 和-o 代替and/or.

5、重定向

输入输出从定向

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>。
command > file :输出保存到file,覆盖file中原内容 类似tee
command >> file :追加,不覆盖

6、正则表达式RE(regular expression)

正则表达式主要用于搜寻字符串,匹配文件内容和过滤特殊信息等;具有十分强大的功能
在linux中常用的工具有grep, sed, awk

下面介绍几种简单的RE语法:

  • ^word :搜索字符在行首 ^[a-w]
  • word$ :搜索字符在行尾
  • . :任何一个可能的字符
  • \ :转义字符,将特殊字符变成普通字符
  • ? :任何一个单一字符
  • * : 重复匹配,一个或多个任意字符
  • [ ] :代表范围或列表 [0-9]

grep:
grep命令是Linux系统中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。
参数:主要作用为设置输出方式

  • -c :打印符合要求的行数
  • -i :忽略大小写
  • -n :在输出符合要求的行的同时连同行号一起输出
  • -v :打印不符合要求的行
  • -A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行
  • -B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行
  • -C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行

参数可以不用,直接进行re匹配,输出匹配结果
例:
ubuntu@ubuntu:~/Documents$ grep -n ^”reboot” test2.text
带行号输出以reboot开头的在文件test2.text中的行内容

ubuntu@ubuntu:~/Documents$ grep -n [0-9] test2.text
带行号输出所有包含数字的行

ubuntu@ubuntu:~/Documents$ grep -n .*/6 test2.text
带行号输出具有格式 xxxx/6的行,x代表任意字符,个数不限

sed,awk
grep实现的只是查找功能,不能实现把查找的内容替换掉。sed工具以及下面要讲的awk工具就能实现把替换的文本输出到屏幕上的功能了,而且还有其他更丰富的功能。sed和awk都是流式编辑器,是针对文档的行来操作的。其内容较为复杂丰富,这里不再详细介绍

7、通配符

通配符是一种特殊语句,主要有* 和?两个符号:

*:一个或多个任意字符
?:一个任意字符

在寻找文件或目录名时,可以通过使用通配符来进行匹配查找相关的文件
例:
ubuntu@ubuntu:~/Documents

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值