split 命令——linux下将一个大的文件拆分成若干小文件
语法格式:
split 选项 参数 原始文件 拆分后文件名前缀
-l | 以行数拆分 |
-b | 以大小拆分 |
paste命令——把文件以列的形式合并两个文件
-d | 指定分隔符合并 |
-s |
把列转换成行合并 |
例子:合并两个文件并输出第2列,第4列
eval命令
命令字前加上eval时,shell会在执行命令之前扫描它两次。eval命令将首先会先扫描命令进行时所有的置换,然后再执行该命令,该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描
示例
[root@cx opt]# echo "hello world" > file
[root@cx opt]# sb="cat file"
[root@cx opt]# echo $sb
cat file
[root@cx opt]# eval $sb
hello world
正则表达式 ——通常用于判断语句中,用来检查某一字符是否满足某一格式
正则表达式是由普通字符与元字符组成
普通字符包括大小写字母、数字、标点符号及一些其他符号
元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符或表达式)在目标对象中的出现模式
基础正则表达式常见元字符:(支持的工具:grep、egrep、sed、awk)
\ | 转义字符,用于取消特殊符号的含义,例:\! \n \$等 |
^ | 匹配字符串开始的位置,例:^a ^the ^# ^[a-z] |
$ | 匹配字符串结束的位置,例:word$ ^$匹配空行 |
. | 匹配除\n之外的任意的一个字符,例:go.d g..d |
* | 匹配前面子表达式0次或者多次,例:goo*d go.*d |
[list] | 匹配list列表中的一个字符,例:go[ola]d [abc] [a-z] [a-z0-9] [0-9]匹配任意以为数字 |
[^list] | 匹配任意非list列表中的一个字符,例:[^0-9] [^A-Z0-9] [^a-z] 匹配任意一位非小写字母 |
\{n\} | 匹配前面的子表达式n次,例:go\{2\}d '[0-9]\{2\}'匹配两位数字 |
\{n,\} | 匹配前面的子表达式不少于n次,例:go\{2,\}d '[0-9]\{2,\}'匹配两位及两位以上数字 |
\{n,m\} | 匹配前面的子表达式n到m次,例:go\{2,3\}d '[0-9]\{2,3\}'匹配两到三位数字 |
\w | 匹配包括下划线的任何单词字符。\W:匹配任何非单词字符。等价于“[^A-Za-z0-9_]” |
\d | 匹配一个数字字符。 \D:匹配一个非数字字符。等价于[^0-9] |
s | 空白符 \S:非空白符 |
注:egrep、awk使用{n}、{n,}、{n,m}匹配时“{}”前不用加“\”
扩展正则表达式元字符:(支持的工具:egrep、awk)grep -E sed -r
+ | 匹配前面子表达式1次以上,例:go+d 将匹配至少一个o,如god good goood等 |
? | 匹配前面子表示式0次或者1次,例:go?d,将匹配gd或god |
() | 将括号中的字符串作为一个整体,例:g(oo)+d,将匹配oo整体1次以上,如good gooood等 |
| |
以或的方式匹配字符串,例:g(oo|la)d,将匹配good或者glad |
实例一:正则表达式匹配e-mail地址
zhangsan123@qq.com
li_si@163.com
wang@wu@sina.com
zhao liu@126.com
qianqi@sina.com.cn
########要求#########
用户名@:长度要求在6-18位,任意大小写英文,任意数字,除了@符号和空格以外的其它任意符号字符,开头只能是 _ 或者字母
^([a-zA-Z_][^@ ]{5,17})@
子域名.[二级域名]:长度任意,符号只能包含 - _ .
[a-zA-Z0-9\_\-\.]+(\.[a-zA-Z0-9\_\-\.]+)?
.顶级域名: 长度在2-5,任意大小写英文
\.([a-zA-Z]{2,5})$
#########答案############
egrep "^([a-zA-Z_][^@ ]{5,17})@[a-zA-Z0-9\_\-\.]+(\.[a-zA-Z0-9\_\-\.]+)?\.([a-zA-Z]{2,5})$"
实例二:号码筛选
区号025开头,号码与区号间可以是空格、-、没有,号码必须是5或者8开头的八位数
02588888888
025-5555555555
025 12345678
025 54321678
025ABC88888
025-85432109
028-85643210
0251-52765421
##########答案###########
grep -E '^(025)[ -]?[58][0-9]{7}$' num.txt
grep -P '^(025)[ -]?[58]\d{7}$' num.txt #\d表示数字 需要加上-P支持
#######解析########
区号025开头 ^(025)
号码与区号间可以是空格、-、没有 [ -]?
号码必须是5或者8开头的八位数 [58][0-9]{7}
(025)[ -]?[58][0-9]{7}