grep 、sed(流编辑器)、awk()
sed:stream editor,操纵纯文本,以行为单位,逐行处理的文本编辑器。
逐行读入内存空间,模式匹配、进行处理,结果输出到屏幕上。
这段内存空间称为模式空间、默认不编辑原文件,仅对模式空间的数据做处理。
sed [option]`AddressCommand` file,……
-n:静默模式,不再显示模式空间中的内容,只打印符合条件的行。
-i:直接修改原文件
-e:script -e script:可以同时执行多条命令。
-f:/path/sed_script:可以把多个sed脚本保存的一个文件中,执行。
-r:表示可以使用扩展的正则表达式
Address:
1、startline,endline
比如1,100 从第一行到第100行
$:最后一行
$-1:倒数第二行
2、/RegExp/
比如 /^root/ 以root开始的行
3、/pattern1/,/pattern2/
这个文件从被模式1匹配到的行到被模式2匹配到的行
4、LineNumber
指定的某行
5、StartLine +n
从startline开始向后的n行,共n+1行。
command
d 删除符合模式的行。如删除前2行 sed ‘1,2d‘ /etc/fstab
p 显示符合模式的行
a \string 在指定的行后面追加新行,内容为string。
\n可以换行
i \string 在指定的行前面追加新行,内容为string。
r FILENAME 将指定文件内容,读入到符合条件的行后面。
w FILENAME 将指定地址范围中行另存到文件中。
s/pattern/string/修饰符 查找并替换,默认只替换每一行中第一次被模式匹配到的字符串。
修饰符:
g:全局替换
i:查找时忽略大小写
& 引用模式匹配到的所有字符串
练习
给定一个路径,取出该文件的父目录。
删除/etc/grub.conf 文件中行首的空白字符
删除/etc/grub.conf 文件中的空白行
传递1个用户名给脚本,判断其用户名和基本组是否一致,并将结果显示出来。
字符测试
==:相等则为真,不等则为假。
!=: 不等则为真,相等则为假。
<
>
-n string:测试字符串是否为空,空则真,不空则假。
-s string:测试字符串是否不空,不空为真,空则假。
echo "scale=2;111/222" | bc