您的位置:首页 > 编程语言 > Python开发

python实现switch功能

2014-02-26 11:11 337 查看
正则表达式的基本语法

. 一点代表一个字符

用途 . 代表任意的字符

eg1: 样式 .T. ,代表三个字符串

eg2: ... 代表字符串长度是3的字符串。

eg3: date\.... 代表 date. 后面接3个字符串,如date.txt date.cfg date.123

但date1234就不符合了,因为已经用 \ 转义其特殊意义,还原为 . 这个字符本身

^ 在行首

用途 ^ 代表位置在行的开头

eg1: ^jack 代表jack应该出现在行首,才符合样式。像 jack and marry 就符合样式 tom and jack 就不符合, 因为jack没有出现在行首

$ 在尾部

用途 $ 代表位置在行的的最后面

eg1: 123$ 代表在行的最后面的123。 像 jack and marry 123 就符合这个样式

[...] 字符集合

用途 [...] 代表字符串杭中的一个字符(长度为1个字符)

eg1: [ABc] 代表A或B或c这3个字符中的一个

eg2: [Ss]ame 代表Same或same

常见用法

[A-Z] 代表一个大写字母

[a-z] 代表一个小写字母

[0-9] 代表一个数字

[^A-Z] 除了大写字母之外的字符

[^a-zA-Z] 一个非英文字母的字符

[^a-zA-Z0-9] 一个非英文,非数字的字符

* 出现0个以上

用途 * 代表前面的 (左邻) 字符有0个或者0个以上

eg1: aA*c 代表A这个字符可能出现0个或0个以上。例如: ac、aAc、aAAc、aAAAc都符合此样式

\{...\} 指定符合的个数

用途 指定前面的 (左邻) 字符的个数

eg1: \{3,5\} 代表前面的字符有3~5个

eg2: [a-z]\{3,5\} 代表以小写字母组成的字符串,长度是3~5

\(...\) 把比对符合的字符串暂时保存起来

eg1: H\(...\)y 表示要保存 H 和 y 之间的三个字符

注 若要提取保存的字符串,可用位置参数, \1代表第一个保存的字符串, \2 代表第二个,一次类推

sed 的用法

基本语法 sed '样式命令' 文件

意义 如果文件中某一行符合"样式",就执行指定的 sed 命令,如删除 (d) 或者 取代 (s)

注: 这里的 "样式",使用一对 // 包含,表示寻找之意;

也可以指定数据行的范围,如 1,6表示作用范围由第1行到第6行,

/AAA/,/DDD/表示作用范围是从含有 AAA 的数据行到含有 DDD 的数据行

用法1 删除某一段范围的数据行

eg1: sed '1,4d' datef1

用途: 把第1行到第4行数据删除,剩下的显示出来。d 是 sed 的删除命令

用法2 把含有 "样式" 的数据删除。

eg1: sed '/La/d' datef3

用途: 把含有 La 的行删除,剩下的显示出来。 其中, // 代表搜索之意。

eg2: sed '/[0-9]\3{3\}/d' datef3

用途 把含有 "3个数字的" 的行删除,剩下的显示出来

在样式[0-9]\{3\}中,\{3\} 表 // 要寻找的是3个数字组成的字符串。

eg3: sed '/^$/d' datef5

用途 删除 date5 的空白行。 ^ 表开头, $ 表结尾, 这两者之间没有任何字符,代表改行是一个空白行

用法3 把不含有 "样式" 的数据行删除。

eg1: sed '/La/!d' datef3

用途 把不含有La的行删除,剩下的显示出来。

这里 ! 是否定的意思,表示不符合样式者

用法4 把含有 "样式" 的数据行显示出来。

eg1: sed -n '/La/p' datef3

用途: 把含有La的行显示出来。其中, p 是sed的命令,它会把目前的数据显示出来。 选项 -n 会抑制 sed 显示其他资料行的默认操作,只显示符合样式的数据行。

用法5 取代

eg1: sed -n 's/La/Oo/p' datef3

用途 这里 s 是取代的意思,第一对//行中包括的字符串 (La) 是搜索的目标,第二队//包含的是置换的字符串 (Oo)。 它会把数据行中 这一行 第一个出现 La 的字符串 换成 Oo 。

eg2: sed -n 's/La/Oo/gp' datef3

用途 g 是全局的意思,把所有的包含字符串 La 全换成 Oo

eg3: sed -n 's/La//p' datef3

用途 把每一行第一个出现的 La 删除 ( 把 La 置换成空字符串,就是删除)。

eg4: sed -n 's/^...//'datef3

用途 把每一行开头的三个字符删除。 ^ 是行首的意思

用法6 取用符合样式的字符串

eg1: sed -n 's/\(La\)/\1Oo/p' datef3

用途 把找到的 La 存起来,用 \1取回来再使用。 其结果为:若数据行含有 La 字符串,则第一个出现的 La会置换成 LaOo,然后再显示这些含有 La 的数据行。

用法7 找到符合样式的数据行后,在进行取代的操作。

eg1: sed -n '/AAA/s/234/567/p' datef3

用途 找到含有 AAA 的哪一行之后,将 234 换成 567 。

eg2: sed -n '/AAA/,/DDD/s/B/567/p' datef3

用途 将含有 AAA 到含有 DDD 的那几行中,将其中的 B 换成 567

eg3: sed -n '2,4s/B/567/p' datef3

用途 由第2行到到第四行中,将其中的 B 换成 567

实例 使用 sed 开启 vsftpd 匿名登录功能

anonyftp1.sh

#! /bin/Bash

VSFTPD_conf='/etc/vsftpd.conf'

TMP_file="/tmp/tmp.$$"

sed s/^.*anonymous_enable=.*/anonymous_enable=YES/ $VSFTPD_conf > $TMP_file

mv -f $TMP_file $VSFTPD_conf

注: /etc/vsftpd.conf 中,这一行的默认可能是:

anonymous_enable=NO

或者被#注释掉了

#anonymous_enable=NO

所以要采用这个样式 ^.*anonymous_enable=.* 来做比对,^表示从行首开始比对,紧接着0个以上的字符,如此,这可能包含 # 可能的情况,后面再用 anonymous_enable=.* 比对anonymous_enable=NO 或者anonymous_enable=YES即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: