Linux--shell三剑客--07
1、sed(stream editor):
作为行编辑器,对文本进行编辑(以行为单位)
默认显示输出所有文件内容
注意:sed编辑文件,却不改变原文件
2、sed的工作原理:
指定一个文本文件,依次读取文本文件每行的内容,读取到模式空间中(pattern space),在模式空间中进行文本匹配,对匹配后的内容进行修改(替换、删除、打印、修改、保存等等)
3、用法:
sed [参数] “sed自己独立的用法格式语句” [文本文件]
4、常见参数
-r 指定扩展的正则表达式
-n 拒绝默认显示
-e script 后面接脚本文件
-f 指定脚本文件
-l 指定文本的换行长度
-i 直接修改文件内容***危险
5、地址定界
a) 直接匹配数值 sed -n ‘5p’ /etc/passwd
b) 指定步长n~m n为起始数字,m为步长 sed -n ‘1~3p’ /etc/passwd
c) $指定行尾 sed -n ’10,$p’ /etc/passwd
d) /正则表达式/ /正则/,/正则/ sed -n ‘/t\{1,\}/,$p’ /etc/passwd
e) 0,addr sed -n ‘0,/t\{1,\}/,$p’ /etc/passwd 匹配0行到正则行
f) addr,+n 匹配addr行到,addr后n行 sed -n ‘/root/,+2p’ /etc/passwd
6、常见命令
p print 打印(默认在题目上显示出来),建议和 -n 一起使用
c 替换行 sed “/被替换的值/c \替换的值” 文件
d 删除 sed “/被删除的值/d 文件 sed “1,3d” 文件 删除1-3行
n/n 读取/添加 模式匹配到的行的下一行内容,在对其进行操作
w 保存文件内容到一个新的文件
s 文本内容替换,默认替换模式空间匹配的第一项,其他不替换
格式:s/pattern/字符串/ 把pattern匹配 的内容替换为字符串
例子 sed “s/r/r/” /etc/etc/passwd 只替换了每行第一个r
g 全部 sed “s/r/r/g” /etc/passwd 把文件中的所有r换为r
\1 \2 \3… 和正则表达式的分组相同,实现反向应用;指定某一个匹配项进行修改匹配
& 调用前面匹配的内容 sed “s/test/&er/g” /etc/passwd 把test开头的所有后面加er后缀
练习:
1、删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符
sed 's/^[[:space:]]\+//' /boot/grub/grub.conf
2、删除/etc/fstab文件中所有以#开头,后面最少跟着一个空白字符的行的行首的#和空白字符
sed 's/^#[[:space:]]\+//' /etc/fstab
3、给定一个目录,取出其目录名
dirname /var/log/message #dirname命令提取路径的目录名部分 #或者 echo '/var/log/message' | sed 's/[^/]\+$//'
4、给定一个目录,取出其目录名
basename /var/log/message #basename命令提取路径的文件名部分
#或者 echo '/var/log/message' | sed 's#^/.*/)##'
下一篇: Linux查询Java进程以及杀掉其进程