shell 编程3 正则表达式

xiaoxiao2022-06-11  29

 

 

1 正则表达式和通配符:

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

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

2 通配符介绍:

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

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 : 用来统计行数 , 单词数,字符数。

转载请注明原文地址: https://www.6miu.com/read-4931427.html

最新回复(0)