当前位置: 代码迷 >> 综合 >> linux工具:sort、uniq、tr、expect
  详细解决方案

linux工具:sort、uniq、tr、expect

热度:93   发布时间:2024-01-06 12:02:34.0

sort排序工具

sort依据不同的数据类型进行排序,通常用于监控服务器健康,与uniq工具结合使用。

sort的选项

sort -f:忽略大小写
sort -b:忽略每行前面的空格
sort -M:按照月份进行排序
sort -n:按照数字进行排序
sort -r:反向排序
sort -u:等同于uniq,表示相同的数据仅显示一行
sort -t:指定分隔符,默认使用Tab键分隔
sort -o 输出文件:将排序结果转存至指定文件
sort -k:按照第几列来排序,k后跟数字,通常和-t一起使用

uniq工具

用于报告或者忽略文件中的重复行,如果重复的行之前有其他行隔开则分开计算,不进行任何操作

uniq的选项

uniq -c:进行计数,将在一起并重复的n行会合成一行并在前面计数n
uniq -d:仅显示重复行
uniq -u:仅显示出现一次的行

tr工具

tr用于字符的替换,但是只能替换单个字符,因此在tr中看到一些单词或字符串不能视作单词或字符串,只能看作一个一个的单个字符,然后将前面的字符和后面的字符一一对应,然后进行替换,tr工具不会对原文件产生修改,tr必须搭配管道符和其他命令一起使用。

tr的选项

tr -c:取代所有不属于第一字符集的字符
tr -d:删除所有属于第一字符集的字符
tr -s:把连续重复的字符以单独一个字符表示
tr -t:先删除第一字符集较第二字符集多出的字符

expect

expect判断上次输出结果中是否包含指定字符串,如果有则立即返回,否则就等待超时时间后返回。expect只能捕捉由spawn启动的进程的输出,用于接收命令执行后的输出,然后和期望的字符串匹配。
expect用于远程登录等情况。

expect格式

一般和shell脚本结合在一起,或者单独写一个Expect脚本,单独写那么#!/bin/bash需要替换成#!/usr/bin/expect并且格式也和在shell脚本中的格式不大相同。

单独写成脚本时
以远程登录为例
spawn ssh root@192.168.214.214
expect {
    "password:"			当登录时出现password:则发送123,\r是回车的意思,123为密码,这样可以实现无交互远程登录{
     send "123\r"; }
}
interact				但是expect登录后就会退出来,如果想手动进行某些操作需要在脚本后面加上interact
如果想登录后无交互执行某些命令则把interact去掉,然后
expect "#"				这里的#和上面的password:都得是唯一的只有这里会出现的,不然检测不到,或检测到别的地方去了
send "ls\r"
send "ifconfig ens33\r"
send "exit\r"
expect eof				表示期望终止,eof可以是任意字符串如果在shell脚本中使用expect
仍然以远程登录为例
expect -c "
spawn ssh root@192.168.214.214
expect \"password:\" {
    send \"123456\r\"}
expect \"]#\" {
    send \"ifconfig\r\"}
expect \"]#\" {
    send \"exit\r\"}
expect eof
"在expect中使用set来调用变量,例如
set user root		第一个是变量名,第二个是变量值
set ip [lindex $argv 0]		在shell脚本中expect引用位置变量的方式[lindex $argv n]为固定格式,n从0开始代表$1-$n
expect也可以设置超时时间等
set timeout 10			登录超时多久退出expect
log_file expect.log		开启日志文件