作用于文件名的通配符:
符号 作用
* 匹配任意(0个或多个)字符或字符串,包括空字符串※
? 匹配任意1个字符,有且只有一个字符
字符集合(匹配一堆字符/文本)
[abcd] 匹配abcd中任何一个字符,abcd也可是其他任意不连续字符
[a-z] 匹配a到z之间的任意一个字符,字符前后要连续,也可以用连续数字[1-9]
[!abcd] 表示不匹配括号里面的任何一个字符,也可书写为[!a-d],这里的!号可以用^替代,即[^abcd]
[root@oldboy ~]# seq -s " " 5
1 2 3 4 5
[root@oldboy ~]# seq -w -s " " 10
01 02 03 04 05 06 07 08 09 10
[root@oldboy ~]# seq 2 2 6
2
4
基础正则表达式字符说明及实践:
^$ 组合符,表示空行,逻辑解释就是以^结尾的行,或者以$开头的行
^.* 组合符,匹配以任意多个字符开头的内容
.*$ 组合符,以任意多个字符结尾的内容
grep "0*" oldboy.txt #匹配0个0,或1个0或多个0
egrep "0+" oldboy.txt #1个0或多个0
? 匹配前一个字符0次或1次
[root@oldboy test]# egrep "0?" oldboy.txt
I am oldboy teacher!
I teach linux.
a{n,m} 匹配前一个字符最少n次,最多m次
a{n,} 匹配前一个字符最少n次
a{n} 匹配前一个字符正好n次
a{,m} 匹配前一个字符最多m次
【元字符】
表达式 描述
\b 匹配单词边界,例如:\boldboy\b只匹配oldboy单词不匹配oldboy*
测试:
[root@oldboy test]# egrep "oldboy\b" /etc/passwd
oldboy:x:5023:5023::/home/oldboy:/bin/bash
表11-3 特殊预定义表达式
正则表达式 描述 示例
[:alnum:] 匹配任意一个字母或数字字符,相当于[a-zA-Z0-9] [[:alnum:]]
[root@oldboy test]# egrep "[[:alnum:]]" oldboy.txt
I am oldboy teacher!
-A after 显示过滤的字符串和它之后的多少行
-B before 显示过滤的字符串和它之前的多少行
-C context 显示过滤的字符串和它之前之后的多少行
练习:取oldboy.txt 2-4行
sed -n '2,4p' oldboy.txt
sed -n '/oldboy/p' oldboy.txt
sed '2,4d' oldboy.txt#2-4行删除
vimdiff 查看2个文件差异,更直观
vimdiff oldboy.txt oldboy.txt.bak
sed -i '2i I teacher linux,at 2i.' oldboy.txt #在oldboy.txt文件的第2行后追加文本。
ifconfig eth0|sed -rn 's#^.*inet (.*) net.*$#\1#gp' #想要的内容要用括号括起来匹配,因为好把他拿出来。() \1
[参数]:
-F 指定字段分隔符※
变量名 属性
$n 当前记录的第n个列
$0 当前整行记录
NF 当前记录中的列的个数,就是有多少列
$(NF-n) 倒数第n列,n为数字
NR 已经读出的记录数,就是行号,从1开始
awk -F ":" '{print $1,$NF,NF}' test.txt
awk 'NR==2,NR==3{print NR,$0}' test.txt
cut切:
-d 指定分隔符(awk -F)
-f数字指定哪列,多列可用逗号或-
-c 按字符取内容
cut -d: -f1 /etc/passwd
echo oldboy oldgirl|cut -c 1-3,8-10 #取1-3以及8-10字符