linux expect 字符集,expect正则表达式和sed的使用

expect正则表达式和sed的使用

实战:expect实现无交互登录

正则表达式

sed

expect使用

expect 是用来进行自动化控制和测试的工具。主要是和交互式软件telnet ftp passwd fsck rlogin ssh tip 等进行自动化的交互。对于大规模的linux 运维很有帮助。expect sourceforge

TCL(Toolcommand language)是一种类似shell脚本的语言,你可以使用它来完成许多操作。expect是从它发展出来的。如果你想要写一个能够自动处理输入输出的脚本(如向用户提问并且验证密码)又不想面对C或者Perl,那么expect是你的最好的选择

expect是在tcl基础上创建起来的,它还提供了一些tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作

1.安装expect安装包

[root@CentOS6-node1~]# yum -y install expect

#我使用的是网络yum源

Loaded plugins: fastestmirror, refresh-packagekit,security

Loading mirror speeds from cached hostfile

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package expect.x86_64 0:5.44.1.15-5.el6_4 willbe installed

Installed:

expect.x86_640:5.44.1.15-5.el6_4

Complete!

[root@CentOS6-node1 ~]#

expect各项参数

使用expect创建脚本的方法

#!/usr/bin/expect

#这里定义的是expect可执行文件的链接路径(或真实路径),功能类似于bash等shell功能

set timeout 30

set timeout 30

#设置超时时间,单位是秒,如果设为timeout -1 意为永不超时

spawn

spawn

#spawn 是进入expect环境后才能执行的内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。不能直接在默认的shell环境中进行执行主要功能,它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

expect

expect

#这里的expect同样是expect的内部命令

#主要功能:判断输出结果是否包含某项字符串,没有则立即返回,否则就等待一段时间后返回,等待时间通过timeout进行设置

send

send

#执行交互动作,将交互要执行的动作进行输入给交互指令

#命令字符串结尾要加上"\r",如果出现异常等待的状态可以进行核查

exp_continue

exp_continue

#继续执行接下来的交互操作

interact

interact

#执行完后保持交互状态,把控制权交给控制台;如果不加这一项,交互完成会自动退出

$argv

$argv

#expect 脚本可以接受从bash传递过来的参数,可以使用 [lindex$argv n]获得,n从0开始,分别表示第一个,第二个,第三个……参数

例子一:免密码通过SSH登录服务器

实验需求:

需要准备两台centos6.5 的操作系统

centos 6.5-1 IP地址:192.168.100.131

centos 6.5-2 IP地址:192.168.100.129

b13e10eaccd841c2cd99bd7ffb75f540.png

#!/usr/bin/expect

set ipaddress "192.168.100.129"            #设置远程连接地址

set name root                              #设置远程登录的用户名

set passwd "linuxtouch"                    #设置远程登录的密码

set timeout 30                             #设置超时时间为30秒

spawn   ssh     $name@$ipaddress      #spawn是一个SSH登录进程

expect {                           #等待响应,根据提示进行判断

"yes/no"        { send "yes\r";exp_continue }

#注意左大括号前空格的问题  #\r代表回车 #exp_continue代表继续执行

"password"      { send "$passwd\r"; }        #\r代表回车

}

interact                       #登录到远程服务器不退出

~

#或者使用此命令执行

[root@CentOS6-node1 ~]# expect sshd.exp

spawn ssh root@192.168.100.129

root@192.168.100.129's password:

Last login: Wed Jul 12 19:46:39 2017 from192.168.100.131

[root@CentOS6-node1 ~]#

[root@CentOS6-node1 ~]# ./sshd.exp

-bash: ./sshd.exp: 权限不够

[root@CentOS6-node1 ~]# chmod +x sshd.exp

[root@CentOS6-node1 ~]# ll !$

ll sshd.exp

-rwxr-xr-x. 1 root root 272 7月  12 18:03 sshd.exp

[root@CentOS6-node1 ~]#

[root@CentOS6-node1 ~]# ./sshd.exp

spawn ssh root@192.168.100.129

root@192.168.100.129's password:

Last login: Wed Jul 12 18:18:34 2017 from192.168.100.131

[root@CentOS6-node1 ~]# ifconfig

eth2      Linkencap:Ethernet  HWaddr00:0C:29:28:71:FE

#inetaddr:192.168.100.129 Bcast:192.168.100.255 Mask:255.255.255.0

inet6addr: fe80::20c:29ff:fe28:71fe/64 Scope:Link

UPBROADCAST RUNNING MULTICAST MTU:1500  Metric:1

RXpackets:13628 errors:0 dropped:0 overruns:0 frame:0

TXpackets:6867 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RXbytes:19004274 (18.1 MiB)  TXbytes:417128 (407.3 KiB)

lo        Linkencap:Local Loopback

inetaddr:127.0.0.1  Mask:255.0.0.0

inet6addr: ::1/128 Scope:Host

UPLOOPBACK RUNNING  MTU:16436  Metric:1

RXpackets:16 errors:0 dropped:0 overruns:0 frame:0

TXpackets:16 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RXbytes:960 (960.0 b)  TX bytes:960 (960.0b)

[root@CentOS6-node1 ~]#

例子二:实现通过SSH自动登录对服务器进行批量管理

1.写一个ssh自动登录脚本

例子:

set ip [lindex $argv 0] #引用第一个常量 set password [lindex $argv 1] #引用第二个常量

执行时输入如下:

expect a.exp 192.168.100.110 #相当于argv0量 linuxtouch#相当于argv1

[root@CentOS6-node1~]# cat a.exp

#!/usr/bin/expect

set ip [lindex $argv 0]                #引用第一个常量

set password [lindex $argv 1]          #引用第二个常量

set timeout -1

spawn ssh root@$ip

expect {

"password" { send "$password\r"; }

"yes/no" { send "yes\r";exp_continue }

}

expect "#"               #[root@CentOS6-node1~]#

send "mkdir -p /linux/touch\r"

send "pwd\r"

send "exit\r"

expect eof                  #结束此进程

#或者换成下面的也可以

expect "#"

send "mkdir -p /linux/touch\r"

expect "#"

send "exit\r"

expect eof

2.准备一个文件用来存放ip地址和密码

[root@CentOS6-node1~]# cat passwd.txt

192.168.100.129  linuxtouch

192.168.100.130  linuxtouch123

[root@CentOS6-node1 ~]#

3.直接测试,脚本目前还没有写好写好后挥发另外一篇帖子

[root@CentOS6-node1~]# cat  passwd.txt |  grep 192.168.100.129  | xargs ./a.exp

spawn ssh root@192.168.100.129

root@192.168.100.129's password:

Last login: Wed Jul 12 23:33:21 2017 from192.168.100.131

[root@CentOS6-node1 ~]# mkdir -p /linux/touch

[root@CentOS6-node1 ~]# exit

logout

Connection to 192.168.100.129 closed.

[root@CentOS6-node1 ~]# cat  passwd.txt | grep  192.168.100.130  | xargs ./a.exp

spawn ssh root@192.168.100.130

root@192.168.100.130's password:

Last login: Wed Jul 12 18:35:49 2017 from192.168.100.1

[root@CentOS6-node1 ~]# mkdir -p /linux/touch

[root@CentOS6-node1 ~]# exit

logout

Connection to 192.168.100.130 closed.

[root@CentOS6-node1 ~]#

查看192.168.100.129是否创建/linux/touch目录

[root@CentOS6-node1 ~]# cd /linux/touch/

[root@CentOS6-node1 touch]# pwd           #创建成功

/linux/touch

[root@CentOS6-node1 touch]#

[root@CentOS6-node1 touch]# ifconfig | grep addr

eth2      Linkencap:Ethernet  HWaddr00:0C:29:28:71:FE

inetaddr:192.168.100.129 Bcast:192.168.100.255 Mask:255.255.255.0

inet6addr: fe80::20c:29ff:fe28:71fe/64 Scope:Link

inetaddr:127.0.0.1  Mask:255.0.0.0

inet6addr: ::1/128 Scope:Host

[root@CentOS6-node1 touch]#

查看192.168.100.130是否创建/linux/touch目录

[root@CentOS6-node1 ~]# cd /linux/touch/

[root@CentOS6-node1 touch]# pwd           #创建成功

/linux/touch

[root@CentOS6-node1 touch]# ifconfig | grep add

eth2      Linkencap:Ethernet  HWaddr00:0C:29:F4:08:A6

inetaddr:192.168.100.130 Bcast:192.168.100.255 Mask:255.255.255.0

inet6addr: fe80::20c:29ff:fef4:8a6/64 Scope:Link

inetaddr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

[root@CentOS6-node1 touch]#

正则表达式的使用

概念:

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串

是指一个用来描述或者匹配一系列符合某个句法规则的字符的那个字符串。

用某种模式去匹配一类字符串。

shell元字符(也叫通配符):由shell来解析,如rm –rf *.txt,元字符* shell把它解析为任意多个字符

正则表达式元字符:由各种执行模式匹配操作的程序来解析,比如:vi、grep、sed、awk、python

正则表达式的基本组成部分[http://man.linuxde.net/docs/shell_regex.html]

1f25bcd94a53e1f11ce07cff871ee23c.png

元字符功能示例

\

\>词尾定位符love\>

\(..\)标签匹配:%s/(192.168)/\1.10./g  :%s/(192.168)/#\1/g

grep使用的元字符

grep:使用基本元字符集 ^ $* [] [^] \< \> \( \) \{\ }

egrep:使用扩展元字符 ? + { } | ( )

注:grep也可以使用扩展字符集,仅需要对这些字符前加转义符 \

\w 所有字母与数字,如[a-zA-Z0-9]ve也可以写成 \w*ve

\b 单词边界如 \ 写成\blove\b

sed的使用

sed(strem editor) 流编辑器

概念:

sed编辑器是一行一行的处理文件内容的。正在处理的内容存放在模式空间(缓冲区)内,处理完成后按照选项的规定进行输出或文件的修改。

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;

sed也是支持正则表达式的,如果要使用扩展正则加参数-r

语法格式:

sed [options] ‘[command]’ filename

参数:

options:

-n抑制自动(默认的) 输出 *** 读取下一个输入行

-e执行多个sed指令

-f运行脚本

-i 编辑文件内容 ***

-i.bak 编辑的同时创造.bak的备份

-r 使用扩展的正则表达式

command:

a\在当前行下面插入文件

i\在当前行上面插入文件

c\把选定的行改为新的指定的文本

p 打印***

d 删除***

r/R 读取文件/一行

w 另存

s 查找

y 替换

h 拷贝模板块的内容到内存中的缓冲区。

H 追加模板块的内容到内存中的缓冲区。

g 获得内存缓冲区的内容,并替代当前模板块中的文本。

G 获得内存缓冲区的内容,并追加到当前模板块文本的后面

D 删除\n之前的内容

P 打印\n之前的内容

实例一:将每行root替换成awk,但是只是每行的第一个root被替换

[root@CentOS6-node1~]# sed 's/root/awk/' a.txt | grep root

awk:x:0:0:root:/root:/bin/bash

ASDF:awk:asdfas:root

[root@CentOS6-node1 ~]#

实例二:将a.txt文件中的所有root字符全部替换成awk

[root@CentOS6-node1~]# sed 's/root/awk/g' a.txt |  grep root

#通过grep过滤出root的行,但是没有,说明成功

[root@CentOS6-node1 ~]# sed 's/root/awk/g' a.txt|  grep awk

awk:x:0:0:awk:/awk:/bin/bash

operator:x:11:0:operator:/awk:/sbin/nologin

ASDF:awk:asdfas:awk

[root@CentOS6-node1 ~]#

注意:s/../../是分隔符,分割符"/"可以用别的符号代替,比如“,” “|” “_“等.

实例三:将a.txt文本中的/sbin/nologin 替换为 /sbin/hehehe

[root@CentOS6-node1~]# sed 's_/sbin/nologin_/sbin/hehehe_g' a.txt | head -10

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/hehehe

daemon:x:2:2:daemon:/sbin:/sbin/hehehe

adm:x:3:4:adm:/var/adm:/sbin/hehehe

lp:x:4:7:lp:/var/spool/lpd:/sbin/hehehe

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/hehehe

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/hehehe

[root@CentOS6-node1 ~]#

此时的‘_’分隔符是不是比‘/’分隔符更好用一点

另外:[root@pandaopt]# sed '#root#cAWK' a.txt

#直接进行匹配处理,在特殊符号前加斜线声明一下。如果是查找替换则不用

实例四:用&表示前面匹配的字符串整个文件

[root@CentOS6-node1~]# sed 's/awk/(&)/g'  a.txt  | head -10

(awk):x:0:0:(awk):/(awk):/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

[root@CentOS6-node1 ~]#

实例五:将a.txt文件中的第一行删除,将第二行的sbin替换为****,查看前5行

注释:

-e:同时替换多项内容-e进行多个字符的匹配

[root@CentOS6-node1~]# sed -e '1d' -e '2s/sbin/*****/' a.txt | head -5

bin:x:1:1:bin:/bin:/*****/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

[root@CentOS6-node1 ~]#

实例六:进行三次替换,将awk替换为&,将daemon替换为@,将x替换为****** 全部替换,只显示文本中前10行

#原文本内容

[root@CentOS6-node1 ~]# cat a.txt | head -10

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

[root@CentOS6-node1 ~]#

[root@CentOS6-node1 ~]# sed's/awk/\&/g;s/daemon/\@/g;s/x/\*****/g' a.txt | head -10

&:*****:0:0:&:/&:/bin/bash

bin:*****:1:1:bin:/bin:/sbin/nologin

@:*****:2:2:@:/sbin:/sbin/nologin

adm:*****:3:4:adm:/var/adm:/sbin/nologin

lp:*****:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:*****:5:0:sync:/sbin:/bin/sync

shutdown:*****:6:0:shutdown:/sbin:/sbin/shutdown

halt:*****:7:0:halt:/sbin:/sbin/halt

mail:*****:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:*****:10:14:uucp:/var/spool/uucp:/sbin/nologin

[root@CentOS6-node1 ~]#

实例七:将第三行的nologin替换为bash并且将第四行的adm替换为两个$$显示前5行

#原文本内容

[root@CentOS6-node1 ~]# cat a.txt | head -5

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@CentOS6-node1 ~]#

[root@CentOS6-node1 ~]# sed -e'3s/nologin/bash/;4s/adm/\$\$/g' a.txt  |head -5

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/bash

$$:x:3:4:$$:/var/$$:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@CentOS6-node1 ~]#

实例八:显示文件的第三行内容

[root@CentOS6-node1~]# sed -n '3p' a.txt

daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@CentOS6-node1 ~]# cat a.txt | head -5

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@CentOS6-node1 ~]#

实例九:将全文中的所有awk字符替换为hehehehehe并打印出来

#未更改之前的文本内容

[root@CentOS6-node1 ~]# cat a.txt | grep awk

awk:x:0:0:awk:/awk:/bin/bash

operator:x:11:0:operator:/awk:/sbin/nologin

ASDF:awk:asdfas:awk

[root@CentOS6-node1 ~]#

[root@CentOS6-node1 ~]# sed -n 's/awk/hehehehehe/gp'a.txt

hehehehehe:x:0:0:hehehehehe:/hehehehehe:/bin/bash

operator:x:11:0:operator:/hehehehehe:/sbin/nologin

ASDF:hehehehehe:asdfas:hehehehehe

[root@CentOS6-node1 ~]#

实例10:将/var/log/messages 中开头是Jul 13字符的打印出来只打印第1行到第5行

[root@CentOS6-node1~]# grep "Jul 13" /var/log/messages  | wc -l

1417

[root@CentOS6-node1 ~]# sed -n '/^Jul 13/ p'  /var/log/messages | sed -n 1,5p

Jul 13 14:27:06 CentOS6-node1 kernel: imklog 5.8.10,log source = /proc/kmsg started.

Jul 13 14:27:06 CentOS6-node1 rsyslogd: [originsoftware="rsyslogd" swVersion="5.8.10"x-pid="1562" x-info="http://www.rsyslog.com"] start

Jul 13 14:27:06 CentOS6-node1 kernel: Initializingcgroup subsys cpuset

Jul 13 14:27:06 CentOS6-node1 kernel: Initializingcgroup subsys cpu

Jul 13 14:27:06 CentOS6-node1 kernel: Linux version2.6.32-431.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.720120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Fri Nov 22 03:15:09 UTC 2013

[root@CentOS6-node1 ~]#

实例11:显示a.txt文本中的2-3行的内容

[root@CentOS6-node1~]# sed -n '2,3p' a.txt

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@CentOS6-node1 ~]#

实例12:显示第一行和第三行内容

nl:查看文本内容并以行号显示出

[root@CentOS6-node1~]# nl a.txt | sed -n -e '1p;3p'

1 awk:x:0:0:awk:/awk:/bin/bash

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@CentOS6-node1 ~]#

实例13:显示文件中除前3行的内容

[root@CentOS6-node1~]# nl a.txt | sed -n -e '1,3!p' | head -10

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

8 halt:x:7:0:halt:/sbin:/sbin/halt

9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

10 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

11 operator:x:11:0:operator:/awk:/sbin/nologin

12 games:x:12:100:games:/usr/games:/sbin/nologin

13 gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

[root@CentOS6-node1 ~]#

实例14:显示文件中第三行和之后的三行

[root@CentOS6-node1~]# nl a.txt | sed -n '3,+3p'

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

4 adm:x:3:4:adm:/var/adm:/sbin/nologin

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

[root@CentOS6-node1 ~]#

实例15:在文件头插入“###”

[root@CentOS6-node1~]# sed -i '1i###'  a.txt

[root@CentOS6-node1 ~]#

[root@CentOS6-node1 ~]# cat !$ | head -5

###

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

[root@CentOS6-node1 ~]#

实例16:在文件尾部插入“@@@”

[root@CentOS6-node1~]# sed  '$a@@@' a.txt

.........

oprofile:x:16:16:Special user account to be used byOProfile:/home/oprofile:/sbin/nologin

ASDF:awk:asdfas:awk

/bin/bash asdfasjdfqwerp

@@@

[root@CentOS6-node1 ~]#

实例17:在文件第二行后插入两行内容

[root@CentOS6-node1~]# sed '2a hello \

> afdw' a.txt

###

awk:x:0:0:awk:/awk:/bin/bash

hello

afdw

bin:x:1:1:bin:/bin:/sbin/nologin

实例18:把文件第三行替换为“$$$”

[root@CentOS6-node1~]# sed '3c$$$' a.txt

###

awk:x:0:0:awk:/awk:/bin/bash

$$$

daemon:x:2:2:daemon:/sbin:/sbin/nologin

实例19:把文件中以SELINUX开头的行替换为SELINUX=disabled

[root@CentOS6-node1~]# sed '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

# This file controls the state of SELinux on thesystem.

# SELINUX= can take one of these three values:

#     enforcing- SELinux security policy is enforced.

#     permissive- SELinux prints warnings instead of enforcing.

#     disabled -No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of these two values:

#     targeted -Targeted processes are protected,

#     mls -Multi Level Security protection.

SELINUXTYPE=targeted

[root@CentOS6-node1 ~]#

实例20:将2到4行复制到尾行

[root@CentOS6-node1~]# sed '2,4H;$G'  a.txt  > qwer.txt

[root@CentOS6-node1 ~]# cat !$

cat qwer.txt

.........

/bin/bash asdfasjdfqwerp

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@CentOS6-node1 ~]#

实例21:将第一行复制到第6行后面

[root@CentOS6-node1~]# sed '1,3H;6G' a.txt > qwer.txt

[root@CentOS6-node1 ~]# cat !$

cat qwer.txt

###

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

###

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

实例22:将第8行内容替换为第2行的内容,有下面两种写法

#第一种

[root@CentOS6-node1 ~]# sed '2h;/shutdown/g'  a.txt

###

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

awk:x:0:0:awk:/awk:/bin/bash

halt:x:7:0:halt:/sbin:/sbin/halt

#第二种

[root@CentOS6-node1 ~]# sed '2h;8g' a.txt

###

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

awk:x:0:0:awk:/awk:/bin/bash

halt:x:7:0:halt:/sbin:/sbin/halt

实例23:删除文本中的所有空行

[root@CentOS6-node1~]# cat a.txt | tail -10

asdfasdf

werqwer

asdf

asd

f

asdf

qwere

[root@CentOS6-node1 ~]#

[root@CentOS6-node1 ~]# sed '/^$/d'  a.txt

............

ASDF:awk:asdfas:awk

/bin/bash asdfasjdfqwerp

asd

asdfasdf

werqwer

asdf

asd

f

asdf

qwere

[root@CentOS6-node1 ~]#

实例24:备份,把原文件备份后,在进行修改原文件

[root@CentOS6-node1~]# sed -i.bak '1c************'  a.txt

[root@CentOS6-node1 ~]# ls

abc                          #a.txt.bak

a.exp                        b.txt                      passwd.txt            视频

anaconda-ks.cfg              install.log                qwer.txt              图片

apache-tomcat-7.0.77         install.log.syslog         sshd.exp              文档

apache-tomcat-7.0.77.tar.gz  ip.log                     sshd.exp.bak          下载

a.sh                         jdk-7u80-linux-x64.tar.gz  vmware-tools-distrib  音乐

a.txt                        login.sh                   公共的                桌面

[root@CentOS6-node1 ~]#

[root@CentOS6-node1 ~]# cat a.txt

************

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

[root@CentOS6-node1 ~]# cat a.txt.bak

###

awk:x:0:0:awk:/awk:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

实例25:删除文件中空行和#号开头的行

[root@CentOS6-node1~]# sed '/^#\|^$/d' abc  |wc -l

13

[root@CentOS6-node1 ~]#

[root@CentOS6-node1 ~]# grep -v '^#\|^$'  abc | wc -l

13

[root@CentOS6-node1 ~]#

[root@CentOS6-node1 ~]# cat abc

Protocol 2

SyslogFacility AUTHPRIV

PasswordAuthentication yes

ChallengeResponseAuthentication no

GSSAPIAuthentication yes

GSSAPICleanupCredentials yes

UsePAM yes

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATELC_MONETARY LC_MESSAGES

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONELC_MEASUREMENT

AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE

AcceptEnv XMODIFIERS

X11Forwarding yes

Subsystem sftp   /usr/libexec/openssh/sftp-server

[root@CentOS6-node1 ~]#

脚本替换

[root@panda opt]#for i in {1..100};do echo "$i ${i}0 ${i}00" >> a.txt;done

[root@panda opt]# sed -n '/10/p' a.txt   ----这个是 / /匹配模式

1 10 100

10 100 1000

11 110 1100

21 210 2100

31 310 3100

41 410 4100

51 510 5100

61 610 6100

71 710 7100

81 810 8100

91 910 9100

100 1000 10000

[root@panda opt]# sed -n '/10/s/10/A/p' a.txt   查找10并对找到的10进行替换

A0 1000 10000

1 A 100

A 100 1000

11 1A 1100

21 2A 2100

31 3A 3100

41 4A 4100

51 5A 5100

61 6A 6100

71 7A 7100

81 8A 8100

91 9A 9100

A0 1000 10000

[root@panda opt]# sed '4,6d' a.txt  --删除第4到6行

4 40 400

5 50 500

6 60 600

7 70 700

8 80 800

9 90 900

10 100 1000

11 110 1100

12 120 1200

13 130 1300

14 140 1400

15 150 1500

[root@panda opt]# sed '1~3d' a.txt  ---第1行开始每3行删除一行

2 20 200

3 30 300

5 50 500

6 60 600

8 80 800

9 90 900

11 110 1100

12 120 1200

14 140 1400

15 150 1500

SFTP从AIX传输文件到WIN2008脚本

1.  #!/usr/bin/expect

2.  #远程主机信息配置

3.  setsftp_host  11.11111.111.1

4.  setsftp_port   22

5.  setsftp_user  aaa

6.  setsftp_password  xxx

7.  setsftp_remote_dir  /

8.

9.  #本地信息配置

10. setlocal_dir  /brcb_edp/TMPDATA/awk/shengji

11. settimeout  -1

12.

13. #sftp putfile to remote server

14. spawn sftp -oport=$sftp_port  $sftp_user@$sftp_host

15. expect"*assword*"

16. send"$sftp_password\r"

17. send"lcd $local_dir\r"    切换本地目录

18. expect"sftp>"

19. send "cd$sftp_remotet_dir\r"    切换远程服务器目录

20. expect"sftp>"

21. send"put HD_COBS2014.txt\r"   put上传:把本地内容上传到远程服务器  get                       下载:从远程服务器下载东西到本地

22. expect"sftp>"

23. send"quit\r"

24. expect eof

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值