1.正则表达式
正则表达式与通配符的区别
通配符:用于匹配文件且为精准匹配,比如ls aa,就只会匹配aa文件。
正则表达式:用于匹配文件中的字符信息且为模糊匹配,比如grep匹配aa,那包含aa的行都会被列出来。
基础正则表达式
*:前一个字符匹配0次或多次。
.:匹配除了换行符以外的任意一个字符。
^:行首
$:行尾
[]:这里面任意一个,只有一个。
例子:[1-9],[a-z],[a-zA-Z](这个有点特殊,记住)
[^]:非,在括号外是行首,在括号内是非。
\:转义符号
{n}:恰好出现n次。
{n,}至少n次
{n,m}n到m次
2.截取字符串
1.cut [选项] 文件名
-f 列号
-d 按照的分割列的符
例如:cut -d “:” -f 2,4 文件名
功能:以冒号为分割符号,输出第二列和第四列。
cut命令的缺点:对于划分符号不明确的表格无法操作。
2.printf ‘输出类型输出格式’ 输出内容
输出类型:
%ns 输出n个字符的字符串
%ni 输出n个数字的整数
%m.nf 输出m位的,浮点数,其中n位小数,m-n位整数。
范例 printf %s 1 2 3 4 5 6
输出:123456
printf ‘%s %s %s’\n 1 2 3 4 5 6
输出:
1 2 3
4 5 6
注意:printf命令不可以接文件名,也不可以用管道符来传入输入信息。
想要打印文件的话需要写:
printf ‘格式自己定’ $(cat student.txt)
这条命令一般用于awk命令中,不会用在命令行。
3.awk ‘条件1 {动作1} 条件2 {动作2} …’ 文件名
cut不能打印分割不均匀的文件,但是awk可以。
例子:awk ‘{printf $1 “\t” $5 “t” $6}’
在awk中print和printf不同,前者会自动换行,后者不会。在shell编程中,没有print命令。
小技巧:12%去掉百分号可以用cut -d “%” -f 1
FS内置变量:{FS=“:”},用于分割
BEGIN动作:在awk中,每次都会先读取文件的第一行,在进行分割等操作,加了BEGIN就会从一开始就进行操作。
END动作:所有动作做完以后再做。
关系运算符:"$3>=60"
4.sed命令
sed命令是轻量级流编辑器,可以修改命令的结果。
sed 【选项】‘【动作】’ 文件名
【选项】
-n:一般sed命令会把所有的数据都输出到屏幕,如果加入此选项,则只会把sed处理过了的信息输出。
-e:允许对输入数据应用多条sed命令编辑。
-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。
【动作】
a \ :追加
c \ :行替换
i \:插入
d:删除
p:打印
s:字符串替换
范例:
行数据操作
sed -n ‘2p’ student.txt #输出第二行,-n很重要,没有就全部输出了。
sed ‘2,4d’ student.txt #删除2,3,4行的数据,如果想要改变原文件需要加入-i选项。
sed ‘2a canglaoshi’ student.txt #最追加canglaoshi在第二行后
sed ‘4c no person’ student.txt #替换第四行为’no person’
字符串替换:
sed ‘s/旧字符串/新字符串/g’ 文件名
3.字符处理
1.sort 【选项】 文件名
选项:
-f 忽略大小写 (偶尔用)
-n 以数值类型进行排序(重要)
-r 反向排序(重要)
-t 指定分割符
-k n[,m] 排序字段范围
2.wc 【选项】文件名
【选项】
-l:只统计行数
-w:只统计单词数
-m:只统计字符数
4.条件判断
这一节看视频吧,很麻烦。
注意:[ 条件判断式 ]一定要有空格,否则会报错。
5.流程控制
1.if语句
格式1:
if [ 条件判断式 ]
then
动作1
else
动作2
fi
格式2:
if
【 条件判断式 】
then
动作
elif
【 条件判断式 】
then
…
else
then
动作 fi
本节有3个例子,建议对这视频反复练习。
nmap命令:功能强大,需要自己安装,可以看开通的服务。
nmap -sT ip地址:扫描服务器上开启的tcp端口。
2.case语句
case $变量名 in
“值1”)
动作1
;;
“值2”)
动作2
;;
*)
动作3
;;
esac
3.for循环
格式1:
for 变量 in 值1 值2 值3 …
do
程序
done
格式2:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
这几个例子也非常好
4.while循环
while [ 条件判断式 ]
do
程序
done
5.until循环
until [ 条件判断式 ]
do
程序
done