一、SED介绍(Stream EDitor)
SED是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要简单一些,awk的功能复杂,对列处理的功能比较强大。
Linux sed命令是利用script 来处理文本文件。
sed可依照script的指令,来处理、编辑文本文件。
sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
二、语法
sed [-hnV][-e<script>][-f<script>][文本文件]
1、参数说明:
-e<script>或 --expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script> 或 --file=<script文件> 以选项中指定的script来处理输入的文本文件。
-h或--help 显示帮助
-n或--quiet 或 --silent 仅显示scirpt处理后的结果
-V 或 --version :显示版本信息。
-r :表示使用扩展正则表达式。
2、动作说明:
a:新增,a的后面可以接字串,而这些字串会在新的一行出现(目前的下一行) a\string:在指定的行后面追加新行,内容为string
c:取代,c的后面可以接字串,这些字串可以取代n1,n2之间的行。
d:删除,因为是删除,所以d后面通常不接任何字串
i:插入,i的后面可以接字串,而这些字串会在新的一行出现(目前的上一行) i\string:在指定的行后面追加新行,内容为string
p:打印,将某个选择的数据打印。通常p会与参数sed -n 一起运行。
s:取代,可以直接进行取代的工作。通常s的动作可以搭配正则表达式。
加修饰符
q:全局替换
i:忽略字符大小写
r FILE:将指定的文件的内容添加至符合条件的行处
w FILE :将指定范围内的内容另存至指定的文件中。
sed 'AddressCommand' file ...
Address:
1、StartLine,EndLine
比如 1,100
$:表示最后一行
2、/RegExp/
/^root/
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行开始,至第一次被pattern2 匹配到的行结束,这中间所有的行。
4、LineNumber
指定的行
5、StartLine,+N
从StartLine开始,向后的N行;
Command:
-d : 删除某行
三、练习题
1、删除/etc/grub.conf文件中行首的空白字符:
sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf
2、替换/etc/inittab文件中“id:3:initdefault:”一行中的数字为5:
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab
3、删除/etc/inittab文件中的空白行
sed '/^$/d' /etc/inittab
4、删除/etc/inittab文件中开头的#号:
sed 's@^#@@g' /etc/inittab
5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符:
sed -r 's@^#[[:space:]] +@@g' /etc/inittab
6、删除某文件中以空白字符后面跟#号的行中的开头的空白字符及#
sed -r 's@^[[:space:]] +#@@g' /etc/inittab
7、取出一个文件路径的目录名称:
echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
四、字符串测试
==:测试是否相等,相等为真,不等为假
!=:测试是否不等,不等为真,相等为假
> :测试是否大于,大于为真,不大于为假
<:测试是否小于,小于为真,不小于为假
-n string :测试指定字符串是否为空,空则为真,不空则为假。
-s string:测试指定字符串是否不为空,不空则为真,空则为假
1、练习题
传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结果显示出来。
2、写一个脚本
传递一个参数(单个字符)给脚本,如果参数为q,Q、quit或Quit,就退出脚本;否则,就显示用户的参数。
五、for循环
对于循环,需要进入条件,退出条件。
常见的循环方法:for 、 while 、 until
for 变量 in 列表 ;do
循环体
done
for i in 1 2 3 4 5 6 7 8 9 10 ;do
加法运算
done
遍历完成之后,退出;
如何生成列表:
(1) {1..100}
(2) 'seq [起始数 步进长度 结束数'
算从1加到100的和
六、练习题