shell脚本之cut,sort,uniq,tr工具用法,Here Document和Expect用法
Posted 世界美好與你環環相扣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本之cut,sort,uniq,tr工具用法,Here Document和Expect用法相关的知识,希望对你有一定的参考价值。
shell脚本之cut,sort,uniq,tr工具用法,Here Document和Expect用法
一.cut:列截取工具
选项:
-b:按字节截取
-c:按字符截取,常用于中文
-d:指定以什么为分隔符截取,默认为制表符
-f:通常和-d一起
应用场合:cut只擅长于处理单个字符为间隔的文本
cat /etc/passwd | cut -d':' -f1 文件以冒号分隔截取第一列内容
cat /etc/passwd | cut -d':' -f3 文件以冒号分隔截取第三列内容
cat /etc/passwd | cut -d':' -f1,3 文件以冒号分隔截取第一列和第三列内容
cat /etc/passwd | cut -d':' -f1-3 文件以冒号分隔截取第一列到第三列内容
who | cut -b3 截取第三个字符
who | cut -c3 截取第三个字符
[root@localhost opt]# cat name | cut -c2 //截取第二个字符可用于汉字
青
二.sort 工具
是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样
语法:
sort [选项] 参数
选项:
●-f:忽略大小写
●-b:忽略每行前面的空格
●-M:按照月份进行排序
●-n:按照数字进行排序
●-r:反向排序
●-u:等同于uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功
●-t:指定分隔符,默认使用[Tab]键分隔
●-o<输出文件>:将排序后的结果转存至指定文件
●-k:指定排序区域
默认ASCLL 码排序,-k1,-k2,-k3表示,第一列,第二列,……
cat /etc/passwd | sort //不加任何选项默认按第一列升序,字母的话就是从a到z由上而下显示
cat /etc/passwd | sort -n -t: -k3 以冒号分隔,第3行区域按升序排列
cat /etc/passwd | sort -nr -t: -k3 以冒号分隔,第3行区域按降序排列
cat a | sort -n -t: -k3 -o a.bak 将排序的文件输出到文件
sort -u name.test //去掉文件中重复的行(重复的行可以是不连续的)
cat name.test | sort |uniq 先sort排序一下再去重
三.uniq工具
主要用于去除连续的重复行
注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行他不能去重
(1)语法
uniq [选项] 参数
(2)常用选项
-c:对重复的行进行计数;
-d:仅显示重复行;
-u:仅显示出现一次的行
cat a | uniq -c //统计重复行的次数,不连续的重复行他不算做重复行
cat a | sort | uniq -c 按字母顺序排列并显示重复行
cat a | sort |uniq -d //结合sort使用,过滤出重复行
cat a | sort |uniq -u //结合sort使用,过滤出不重复的行
cat a | sort | uniq //结合sort使用,去重
cat a | sort -u //结合sort使用,去重
实例1:查看登陆用户
who | awk '{print $1}' | uniq
实例2:查看登陆过系统的用户
last | awk '{print $1}' | sort | uniq | grep -v "^$" | grep -v wtmp
tr:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符
四.tr工具
语法
用法:tr [选项]… SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
常用选项
-d 删除字符
-s 删除所有重复出现的字符,只保留第一个
cat fruit | tr 'a-z' 'A-Z' 把文件中小写字母全部替换成大写字母
cat a | tr 'apple' 'APPLE' /替换是一一对应的字母的替换
cat a | tr 'a' ' //把替换的字符用单引号引起来,包括特殊字符
cat fruit | tr 'a' '/'
cat fruit | tr 'ap' '/' //多个字符替换成一个
cat fruit | tr 'apple' 'star' //a替换成s,p替换成a,le替换成r
cat fruit | tr "'" '/' //如果想替换单引号则需要用双引号把单引号引起来
cat fruit | tr -d 'a' //删除所有a
cat fruit | tr -d 'apple' //把所有含有这5个字母的都删除
cat a | tr -d '\\n' 删除回车,把文本显示为一行
cat fruit | tr -s 'p' //对p字符去重,只保留第一个
cat fruit | tr -s '\\n' //遇到多个回车只保留一个回车,相当于去除空行
五.Here Document概述
使用I/O重定向的方式将命令列表提供给交互式程序标准输入的一种替代品
语法格式
命令<<标记
...
标记
[root@localhost ~]# cat <<EOF
> hello
> word
> EOF
hello
word
[root@localhost ~]#
[root@localhost ~]# cat <<xxx //自定义标识符
> hello
> xxx
hello
[root@localhost ~]#
编辑本地yum源配合文件
如果一个文件需要增加内容时可用>>追加
在脚本中写入
#!/bin/bash
cat > yum.repo <<EOF
[test]
name=test
baseurl=file:///mnt
gpgcheck=0
EOF
前面加-,屏蔽制表符,直接输出内容
# ! /bin/bashcat <<EOF
cat <<-EOF
hello world
EOF
磁盘分区免交互
#!/bin/bash
fdisk /dev/sdb <<EOF
n
p
w
EOF
自定义变量
[root@localhost ~]# read a <<EOF
> 220
> EOF
[root@localhost ~]# echo $a
220
Here Document使用注意事项
■标记可以使用任意合法字符
结尾的标记一定要顶格写,前面不能有任何字符
结尾的标记后面也不能有任何字符(包括空格)
开头标记前后的空格会被省略掉
六.Expect
●建立在tcl之上的一个工具
●用于进行自动化控制和测试
●解决shell脚本中交互相关的问题
●建立在tcl之上的一个工具
●用于进行自动化控制和测试
●解决shell脚本中交互相关的问题
安装 expext tcl
yum -y install expect
yum -y install tcl
expect基本命令
expect
●判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
●只能捕捉由spawn启动的进程的输出
●用于接收命令执行后的输出,然后和期望的字符串匹配send
●向进程发送字符串,用于模拟用户的输入
●该命令不能自动回车换行,一般要加\\r (回车)
spawn
启动进程,并跟踪后续交互信息结束符
expect eof
等待执行结束
执行自动化任务通常使用expect eof
interact
执行完成后保持交互状态,把控制权交给控制台
set
●设置超时时间,过期则继续执行后续指令
●单位是秒
●timeout-1表示永不超时
●默认情况下,timeout是10秒
exp_continue
●允许expect继续向下执行指令
send_user
●回显命令,相当于echo
接收参数
●Expect脚本可以接受从bash传递的参数
●可以使用[lindex $argv n]获得
n从0开始,分别表示第一个,第二个.第三个…参数
免交互式ssh远程
#!/usr/bin/expect
spawn ssh root@192.168.80.1
expect {
"(yes/no)"
{ sed "yes\\r"; }
"password:"
{ send "123456\\r"; }
}
interact
免交互式ssh远程,执行命令后退出
"(yes/no)"
{ sed "yes\\r"; }
"password:"
{ send "123456\\r"; }
}
expect "#"
send "ls /\\r"
send "ifconfig ens33\\r"
send "exit\\r"
expect xxx //xxx为结束符
引用位置变量
#!/usr/bin/expect
set timeout 10 //设置超时时间,登陆超时多少秒退出
log_file test.log //开启日志文件,日志记录操作
log_user 1 //1为屏幕输出信息,0为不输出
set user root
set ip [lindex $argv 0] //设置第一个位置变量为ip
set pass [lindex $argv 1] //设置第二个位置变量为登陆密码
spawn ssh $user@$ip
expect {
"(yes/no)"
{ sed "yes\\r"; }
"password:"
{ send "$pass\\r"; }
}
expect "#"
send "ls /\\r"
send "ifconfig ens33\\r"
send "exit\\r"
expect xxx
在shell脚本中的免交互ssh登陆
#!/bin/bash
expect -c " //需要用expect -c调用expect程序
spawn ssh root@192.168.80.1
expect \\"password:\\" { send \\"123456\\r\\" }
interact
"
shell脚本免交互式ssh远程,执行命令后退出
#!/bin/bash
expect -c "
spawn ssh root@192.168.80.1
expect \\"password:\\" { send \\"123456\\r;exp_continue\\" }
expect \\"]#\\" { send \\"ifconfig ens33\\r\\" }
expect \\"]#\\" { send \\"exit\\r\\" }
expect eof
"
以上是关于shell脚本之cut,sort,uniq,tr工具用法,Here Document和Expect用法的主要内容,如果未能解决你的问题,请参考以下文章
Shell脚本------正则表达式与常用命令(sort,uniq,tr,cut)
自动化运维必须要学的Shell脚本之——管道命令(sort/tr/cut等)
shell特殊符号cut ,sort_wc_uniq,tee_tr_split命令shell特殊符号
22.Shell特殊符号和cut,sort,wc,uniq,tee,tr,split命令