正则表达式

1.0


1-1 位置锚定

^:行首锚定,表示以什么开头。
$:行尾锚定,表示以什么为结尾。
^$:匹配的是空行。                                                                                                                          \<:也可以写成\b,词首锚定,用于单词模式的左侧(连续的字符,数字,下划线都算单词内部)。
\>:也可以写成\b,词尾锚定,用于单词模式的右侧。
\broot\b:匹配整个单词,而不是匹配行。

^root$ #匹配整行,而且整行只能有这一个字符串。

1-2 分组和逻辑或

分组:()

或:  \ |


1-3 扩展正则表达式

*
?
+
{n}
{n,m}
{n,}
{,n}
|
用法:
grep -E
sed -r
egrep


2.0

2-1 sed

免交互。
按行来处理。
sed是一张流编辑器。

除非确认操作,否则数据一概不变,在缓冲区的数据,展示结束之后,会被立刻销毁。
常用选项:
-e 指定命令来处理输入的文本文件,只要 一个操作命令,-e可以不写。一般都是执行多个操作命令 -e。
-f 用指定文件中的脚本来对另外一个文件进行处理。
A B
A脚本命令  -----B 文件内容进行处理
-i:将会直接生效,慎用。
-n:屏蔽默认输出。只显示一条结果。
操作命令:
s:替换字符。
d:删除内容,删除指定行。
a:新增,在当前行的下面插入一行指定内容。
i:插入,在选定行的上面插入一行内容。
c:替换整行。
y:单字符转换,转换前后的字符长度,必须保持一致。
p:打印。
r:扩展正则表达式。
sed的主要作用是对文本内容的增删改查。

打印偶数行

sed -n 'n;p' test.txt

打印奇数行

sed -n 'p;n' test.txt

*面试题:如何免交互删除文件的内容,保留文件*

sed -i 'd' test1.txt

cat /dev/null > test1.txt

*面试题:删除空行,过滤空行*
sed '/^$/d' test.txt        面试首选回答sed
grep -v "^$" test.txt
cat test.txt | tr -s "\n"

操作符 s
sed 's/[A-Z]/\l&/g' test.txt
将字母大写进行替换成小写。
l&:l+& 转换小写的特殊符号,前面要加\转义符。
sed 's/[a-z]/\u&/g' test.txt
将字母小写进行替换成大写。
u&:u+& 转换大写的特殊符号,前面要加\转义符。

操作符 c
sed  '/one/c 我真帅!' test.txt
sed '/要替换的行/c 替换的内容' test.txt
最简单最实用

单字符替换:
y 只是对单字符替换,前后的长度必须一一对应。不是整体替换。
sed 'y/要替换的字符/替换后的字符/' test.txt
如果替换字符长度不对等 -> sed 'y/s/好帅/' test.txt × -> sed 'y/sf/好帅' test.txt

操作符 r
#three这行读取另外一个文件,然后插入到three行下
sed '/three/r ky01.txt' test.txt

操作符 i
 sed '$i 1111' test.txt

*面试题*匹配文档内容中的版本号
cat 1.txt | grep -E '[0-9]+\.'
cat 1.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'
*笔试题*查看指定时间内的日志
sed -n '/14:00:01/,/14:42:23/p' /var/log/messages

-f:第一个文件当中命令对第二个文件的内容进行处理
sed -f 1.txt 2.txt


3.0 

3-1 awk

awk:是一个强大的文本编辑工具,逐行读取文件内容,然后输出结果。
最强大的功能swk本身也是一个开发工具,内置代码,和java很像。
按行取列:
和cut类似,cut的默认分隔符是一个tab键
awk的默认分隔符是空格或者tab键,但是多个空格,多个tab键,他会自动压缩成一个。
awk可以在免交互的情况下,实现复杂的文本操作。
awk 'pattern action' file 操作符 怎么干 处理对象
awk的选项:
-F:指定分隔符,默认是空格可以不加。
-v:变量赋值。

awk '模式或条件{处理动作}'
awk的默认处理动作就是打印。

awk内置变量:
1、$0:打印所有
2、$n:处理行的第几列
3、NR:处理行的行号 NR = >
4、NF:处理行的字段个数,$NF代表最后一个字段

begin模式:先定义条件,然后对条件进行操作,最后对操作进行处理。

打印文件行号和内容
 awk '{print NR,$0}' test.txt
指定行号打印
awk 'NR==3{print}' test.txt
awk 'NR==3,NR==5{print}' test.txt
awk 'NR==3;NR==5{print}' test.txt
范围打印
awk  '(NR>=3)&&(NR<=5){print}' test.txt
偶数行打印
awk 'NR%2==0{print}' test.txt
奇数行打印
awk 'NR%2!=0{print}' test.txt
取幂运算
awk 'BEGIN{print 3^2}'
awk 'BEGIN{print 3**2}'
如何通过awk进行文本过滤打印
awk '/^root/{print}' /etc/passwd
awk '/root/,/operator/{print}' /etc/passwd 范围过滤
awk '/bash$/{print}' /etc/passwd 过滤以bash结尾
awk 'BEGIN{x=1};{x++};END{print x}' test.txt   初始化条件 对初始化条件进行操作 处理动作
 head -n 5 /etc/passwd | awk -F: '{print $4}' 打印前五行的第五列
如何用begin模式指定打印
 head -n 5 /etc/passwd | awk 'BEGIN{FS=":"};{print $5}'

awk的精确筛选:
$(><==):用于对比数值。
$n~"字符串":代表第n个字段包含某个字符串。
$n!~"字符串":代表第n个字段不包含某个字符串。
$n=="字符串":代表第n个字段为某个字符串。
$n!="字符串":代表第n个字段不为某个字符串。
$NF:最后一个字段。

awk的三元表达式
*面试题*:awk -F: '{max=($3>=$4)?$3:$4; {print max,$0}}' /etc/passwd
max $3 $4
? 表示if
:  表示else


4.0

4-1 免交互

交互:计算机播放器,放视频,发出指令,计算执行执行指令,做出对应的动作,播放视频。
Linux系统中的交互,passwd
尤其在shell脚本中,我们的运行就是免交互。自动化运维。
两种格式 here Documnet 免交互
         expect 语法实现免交互

here Documnet:
语法格式:
--------------
命令 <<标记
内容
标记
---------------
注意事项:
1、标记名称可以自定义,但是必须要是合法字符(字母开头,后面跟数字,不要有特殊符号)。
2、结尾标记一定要顶格写,前面不能有任何字符,包括空格。
3、结尾的标记后面也不能有任何字符,包括空格。
4、开头标记前面如果有空格,会被省略。
支持变量替换

expect:建立在tcl语言基础上的一个工具,用于自动化控制和测试,主要用来解决shell当中的交互问题。
passwd
123
123
转义字符:
1、\n 表示换行符
2、\t 表示制表符 tab键
3、\r 表示回车,可以和\n通用。
4、\b 表示退格符,相当于backspace
第一步:
#!/usr/bin/expect
第二步:
开启跟踪执行的命令
spawn 开启一个会话和启动进程,并且跟踪后续的交互信息。
spawn passwd p
第三步:
捕获动作
expect 捕获想要的内容,匹配输入字段,然后输入内容。
第四步:
发送指令
send 向进程发送字符串,模拟用户的输入。send不能自动换行,一般后面要跟上\r或者\n
expect "新的密码:" {send "abc123\r"}
写在一行必须要加花括号
方式二:
expect "密码"
send "abc123\r"
多分支:
expect
{
"密码1" {send "abc123\r"}
"密码2" {send "abc123\r"}
}
第五步:定义结束符号
expect eof
交互结束之后,会退回到原用户。
su - p
root

interact
执行完成之后保持现有状态,不变
结束符号只能二选一,不能同时存在

参数设置:
set 设置命令,可以更改内部的一些参数
set timeout 5  设置脚本的超时时间为5秒
默认是10秒

exp_continue
相当于在expect捕获判断之后,还能够继续向下匹配。
类似于continue 表示允许expect继续向下执行指令。
语法格式:
expect{
    "(yes/no)"{send"yes\n";exp_continue}
    "password"{send "abc123\n"}
}

expect eof
否则报错

打印功能:回显命令
send_user 跟echo一个作用,打印一个字符串。

接受参数:
可以接受从bash的命令行传入的参数。类似于位置变量的格式
set hostname [ lindex $argv 0]
set passwd [ lindex $argy 1]
hostname=$1
passwd=$2
执行方式:
bash sh source都不能执行expect脚本,必须赋权之后用./或者绝对路径执行

嵌入执行模式:将expect的过程融入shell当中,一块执行。
切换终端环境的交互命令,不要用嵌入模式
#!/bin/bash

免交互:
/usr/bin/expect <<-EOF

EOF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值