shell 编程3 正则表达式

 

1 正则表达式和通配符:

  1. 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。 grep、awk、sed等命令可以支持正则表达式。

  2. 通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。

2 通配符介绍:

  1. * 用来匹配任意内容
  2. ?用来匹配任意一个字符(有且只有一个字符)
  3. [] 匹配括号内的一个字符

3.正则表达式

元字符:

* 元字符详解:

假设文件a.txt 有为一下内容:
a
aa
aaa
aaaa
aaaaa

b
bb
bbb
bbbb
bbbbb

当我们使用命令 grep . a* 是,此时会将所有的字符都输出,因为* 匹配前面表达式0个或多个,所以都可以匹配

3 字符串撷取命令

cut : 对列进行撷取,grep 对行进行撷取

cut是列提取命令,默认用的分隔符是Tab键,要指定分隔符用-d选项 当截取比较规律的文档,如有“:”或有Tab制表符时,用cut截取比较方便 #cut [选项] 文件名 选项(选项没有先后顺序):

-f 列号:提取第几列(如果要提取几列,则用“,”将列号隔开)

-d 分隔符:按照指定分隔符分隔列

注意:如果制定分隔符为一个空格,cut命令只会以一个空格为分隔符,而不会以多个空格为分割符。

printf 命令:

可以执行输出操作,printf 字符串格式  输出内容 

输出类型:

%ns 代表字符串 n表示输出几个字符串
%ni 输出整数, n表示输出几个数字
%n.mf 输出小数, n表示有输出n位,有m位小数

示例:
printf "this num is %i" 123

printf "this str is %s" 'str'

printf "this float is %8.2f" 123222.3333

输出转义字符时,用双引号括起。

awk命令:

awk  '条件1{动作1}   条件2{动作2}...'   文件名,条件满足时,执行动作

操作文本:
student.txt:

ID	Name	gender	Mark
1	1	1	1
2	2	2	2
3	3	3	3

获取第一列和第三列:
awk '{printf $2 "\t" $4 "\n"}' student.txt  

$1表示第一列,$0表示所有的列

查看内存:df -h |awk '{printf $1 "\t" $4 "\n"}'

条件表达时:
BEGIN:在读取之前的操作,可以指定分隔符,使用FS内置变量设置
END:在读取玩之后的操作

示例:
awk 'BEGIN{FS=":"}{printf $1 "\n"}' /etc/passwd  //输出所有用户

cat /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"} {printf $1 "\t" $3 "\n"}'

sed: sed命令是用来进行文件内容修改的。

格式:sed 选项 '动作‘ 文件名

选项:

-n :将处理的行打印到屏幕
-e :允许多条sed命令
-i :修改源文件

动作:

a 追加
c 行替换
i 插入
p 打印
s 字符替换,格式为 “行范围s/就字符/新字符/g”

示例:

sed -n '2p' student.student //显示第二行

sed '2a haha' student.txt //在第二行追加haha

sed '2i haha' student.txt //在第二行前插入

sed '2c haha' student.txt //替换第二行

sed '3s/2/haha/g' student.txt   //将第三行的所有 2 替换为haha

sed -e 's/2/haha/g;s/1/ha/g' student.txt  替换第一行的字符和第二行的字符

sort :

排序命令:可以对文本进行排序,以行显示。

选项:

-f : 忽略大小写
-n : 以数字大小统计,默认以字符排序
-r : 反向排序 
-t : 指定分隔符
-k : 第几个字符进行排序,与-t 混合使用

示例:

sort /ect/passwd //默认排序
sort -n -t ":" -k 3 /etc/passwd // 以: 为分隔符,以第三个分割的字符进行数字排序

wc : 用来统计行数 , 单词数,字符数。

猜你喜欢

转载自blog.csdn.net/qq_39158142/article/details/83316807
今日推荐