之前说过sed的高阶用法,其实普通情况下,正则是最常用的,下面就来说一下,用不到的就暂时不说
1^ # 匹配行开始,如:/^sed/匹配所有以sed开头的行。
2$ # 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
3. # 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
4* # 匹配0个或多次字符,如:/a*sed/匹配所有模板是0个或多个a后紧跟sed的行。后紧跟sed的行。
5\? # 匹配0次或1次他前面的字符
6\+ # 匹配1次或多次他前面的字符,如:空格\+ 或 “\+“匹配至少一个或多个空格
7| #管道符号用来匹配两边任意一个子表达式,如:'/101\|102/p' 匹配包含101或者102的行打印
8[] # 匹配一个指定范围内的字符,如/[sS]ed/匹配sed和Sed。
9[^] # 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
10\(..\) # 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
11& # 保存搜索字符用来替换其他字符,如s/love/ **&** /,love这成 **love** 。
12\< # 匹配单词的开始,如:/\<love/匹配包含以love开头的单词的行。
13\> # 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
14\{m\} # 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
15\{m,\} # 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
16\{m,n\} # 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
例子很多:
用户名,后面跟1个或者多个空格,再跟密码;更换成用户名 密码 MAC地址
1sed -i "s/${username} \+${password}$/${username} ${password} ${IV_HWADDR}/" ${PASSFILE}
跟 shell 脚本的参数一起记比较好:
1$0 脚本本身的名字
2$1 传递给该shell脚本的第1个参数
3$2 传递给该shell脚本的第2个参数
4$@ 传给脚本的所有参数的列表
5$# 传给脚本的参数个数
6$* 以一个单字符串显示所有向脚本传递的参数,与位置变量不同,>参数可超过9个
7$$ 脚本运行的当前进程ID号
8$? 命令执行结果反馈,0表示执行成功,其余数字表示执行不成功。
还有一个重要的地方,sed 使用 -i 对文件进行修改时,执行者需要有对文件目录的写权限,因为sed实际是产生了一个临时文件,然后再挪回去得!!!!