一、split命令
将 linux 下的一个大文件拆分成若干小文件
1.语法格式
格式:
split 选项 参数 原始文件 拆分后文件名前缀
常用选项:
-l:以行数拆分
-b:以大小拆分
2.命令演示
2.1选项 -l :以行数分隔
cat -n anaconda-ks.cfg
69 pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
70 pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
71 pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
72 %end
split -l 35 anaconda-ks.cfg anac
ls
123.txt aa.sh abc.txt anacaa anacab anacac anaconda-ks.cfg
cat -n anacaa
32 clearpart --none --initlabel
33 # Disk partitioning information
34 part /boot --fstype="xfs" --ondisk=sda --size=500
35 part pv.252 --fstype="lvmpv" --ondisk=sda --size=60939
2.2选项 -b :以大小分隔
split -b 1K anaconda-ks.cfg
ll -h
-rw-r--r--. 1 root root 1.0K 5月 11 15:27 xaa
-rw-r--r--. 1 root root 981 5月 11 15:27 xab
-rw-------. 1 root root 2.0K 3月 22 20:55 anaconda-ks.cfg
二、paste命令
以列的形式合并文件
1.语言格式
格式:
paste 文件1 文件2
常用选项:
-d:指定合并后的分隔符
-s:把列的内容转换成行输出
2.命令演示
echo -e "a\nb\nc" > a
cat a
a
b
c
echo -e "1\n2\n3" > b
cat b
1
2
3
paste a b
a 1
b 2
c 3
2.1选项 -d :指定合并分隔符
paste a b -d ":"
a:1
b:2
c:3
paste a b -d ","
a,1
b,2
c,3
2.2选项 -s :将列内容转换成行输出
paste a b -s
a b c
1 2 3
paste a b -s -d ":"
a:b:c
1:2:3
三、eval命令
命令字前加上eval时,shell会在执行命令之前扫描它两次。eval命令将首先会扫描命令行进行所有的置换,然后再执行该命令。
适合于一次扫描无法实现其功能的变量。
1.命令演示
#将hello world重定向文件a中
echo "hello world" > a
#定义变量=cat a
arr="cat a"
#输出变量为cat a
echo $arr
cat a
#用eval命令会先扫描$arr,查找出arr=cat a;然后执行cat a命令
eval $arr
hello world
四、正则表达式
通常用于判断语句中,用来检查某一字符串是否满足某一格式。
正则表达式是由普通字符与元字符组成。
- 普通字符包括大小写字母、数字、标点符号及一些其他字符
- 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式
1. 基础正则表达式
基础正则表达式常见元字符(支持工具:grep ;egrep ;sed ;awk)
\:转义字符,用于取消特殊符号的含义,例:\! ; \n ; \$
^:匹配字符串开始的位置
$:匹配字符串结束的位置,例 ^$ :表示空行
.:匹配除\n之外的任意的一个字符
*:匹配前面子表达式 0 次或者 多 次
[list]:匹配list列表中的一个字符
[^list]:匹配任意非list列表中的一个字符
\{n\}:匹配前面的子表达式 n 次
\{n,\}:匹配前面的子表达式不少于 n 次
\{n,m\}:匹配前面的子表达式 n 到 m 次
注:egrep 、 awk 使用 {n}; {n,}; {n,m}匹配时,“{}”前不用加“ \ ”
\w:匹配包括下划线的任何单词字符。
\W:匹配任何非单词字符。等价于“[^A-Za-z0-9_]。
\d:匹配一个数字字符。
\D:匹配一个非数字字符。等价于“[^0-9]”。
\s:空白符
\S:非空白符
2.扩展正则表达式
扩展正则表达式元字符:(支持工具:egrep,awk) grep -E;sed -r
+:匹配前面子表达式1次以上
?:匹配前面子表达式0次或者1次
():将括号中的字符串作为一个整体
|:以或的方式匹配字符串,例:g(oo|la)d,匹配结果为good或glad
3.实验
3.1筛选指定的电子邮箱:用户名@子域名.[二级域名].顶级域
要求:
用户名@:长度要求在6-18位,任意大小写英文,任意数字,除了@符号和空格以外的其它任意符号字符,开头只能是 _ 或字母
子域名.[二级域名]:长度任意,符号只能包含 - _ .
. 顶级域名:长度在2-5,任意大小写英文
#在以下电子邮箱中筛选出指定电子邮箱
cat a.txt
zhangsan123@qq.com
li_si@163.com
wang@wu@sina.com
zhao liu@126.com
qianqi@sina.com.cn
12qianqi@sina.com.cn
qianqi@sina.com.crpeof
用户名@:(^[a-zA-Z_][^@ ]{5,17})@
#匹配以a-zA-Z0-9_为开头的一个字符,
#总长为6-18个字符,后面反向匹配除了 '@'和' '的任意字符5-17次
子域名:[a-zA-Z0-9_-\.]+(\.[a-zA-Z0-9_-\.]+)?
# + 匹配1次以上
#?匹配0次到1次,二级域名可以有,也可以没有。
顶级域名:\.(a-zA-Z]{2,5})$
#匹配2-5次的任意大小写英文
cat a.txt
zhangsan123@qq.com
li_si@163.com
wang@wu@sina.com
zhao liu@126.com
qianqi@sina.com.cn
12qianqi@sina.com.cn
qianqi@sina.com.crpeof
egrep "(^[a-zA-Z_][^@ ]{5,17})@[a-zA-Z0-9_-\.]+(\.[a-zA-Z0-9_-\.]+)?\.([a-zA-Z]{2,5})$" a.txt
zhangsan123@qq.com
qianqi@sina.com.cn