split,paste,eval命令及正则表达式

目录

一、split命令

1.语法格式

2.命令演示

2.1选项 -l :以行数分隔

2.2选项 -b :以大小分隔 

 二、paste命令

1.语言格式

2.命令演示

 2.1选项 -d :指定合并分隔符

 2.2选项 -s :将列内容转换成行输出

三、eval命令

1.命令演示

四、正则表达式 

1. 基础正则表达式

2.扩展正则表达式

3.实验

3.1筛选指定的电子邮箱:用户名@子域名.[二级域名].顶级域


一、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
[email protected]
[email protected]
wang@[email protected]
zhao [email protected]
[email protected]
[email protected]
[email protected]

用户名@:(^[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
[email protected]
[email protected]
wang@[email protected]
zhao [email protected]
[email protected]
[email protected]
[email protected]
egrep "(^[a-zA-Z_][^@ ]{5,17})@[a-zA-Z0-9_-\.]+(\.[a-zA-Z0-9_-\.]+)?\.([a-zA-Z]{2,5})$" a.txt
[email protected]
[email protected]

split,paste,eval命令及正则表达式_第1张图片

你可能感兴趣的:(linux,运维,服务器)