文本处理三剑客(sed)
1.sed介绍
2.定址
可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如 1,3 表示 1,2,3 行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定
3.sed命令的格式
调用 sed 命令有两种形式:
sed [options] ‘command’ file(s)
sed [options] -f scriptfile file(s)
4.sed 对字符的处理
p 显示
d 删除
a 添加
c 替换
w 写入
i 插入
4-1.p:显示模式
sed -n '/\:/p' fstab 显示fsatb中:行
sed -n '/UUID$/p' fstab 显示fsatb中UUID结尾行
sed -n '/^UUID/p' fstab 显示fsatb中UUID开始行
sed -n '3,6p' fstab 显示fsatb中3到6行
sed -n '3,6!p' fstab 显示fsatb中除了3-6行的其他行行
不加-n重复显示
4-2.d:删除模式
sed '/^UUID/d' fstab 删除fstab中以UUID开始的行
sed '/UUID$/d' fstab 删除fstab中以UUID结尾的行
sed '1,6d' fstab 删除fstab中1-6行
sed '/UUID/!d' fstab 删除fstab中不是UUID的行
sed '4,6!d' fstab 删除fstab中不是4-6行
4-3.a:添加模式
sed '/^UUID/a \hello' sed fstab 追加hello到fstab以UUID开头的行后
sed '/UUID$/a hello\n world' sed fatab 增加换行
4-4.c:更改模式
sed '/^UUID/c hello' fstab 对于fatab把符合UUID开头的行替换hello
4-5.w:写入模式
sed ‘/^UUID/w /tmp/fstab.txt’ /etc/fstab
(把/etc/fstab 中 UUID 开头的行保存到/tmp/fstab 中)
sed -n‘/^UUID/w /tmp/fstab.txt’ /etc/fstab
sed '/^UUID/=' fstab 显示fstab中以UUID开头的行数和内容,会显示其他不符合条件的行内容
sed -n '/^UUID/=' fstab 显示fstab中以UUID开头的行数,只显示符合条件的行号和内容
sed ‘6r /etc/issue’ /etc/fstab (把/etc/issue 文件内容放置
到/etc/fstab 中的第六行)
sed -e 的用法:将下一个字符串解析为 sed 编辑命令
把/etc/fstab中符合以UUID开头的行保存到/mnt/file1
(1)把/etc/fstab 中 UUID 开头的行保存到/tmp/fstab
sed ‘/^UUID/w /tmp/fstab.txt’ /etc/fstab
(2)查看/etc/fstab中以UUID行是第几行
sed '/^UUID/=' fstab
sed '/^UUID/=' fstab -n ##-n表示只输出符合条件的行号
4-6.i:插入模式
sed '/^UUID/i hello' sed fstab 把hello插入到fstab以UUID开头的行前
sed '/^UUID/i hello\nworld' sed fstab 把hello插入到fstab以UUID开头的行前下一行插入world
5.sed的其他用法
5-1.文本的替换
sed 's/#/\*/g' fstab 把fstab中所有的#替换为*
sed 's/\//+/g' fstab 把fstab中所有的/替换为+
sed 's@/@+@g' fstab 把fstab中所有的/替换为+
sed '2s/:/**/g' passwd 把passwd中第2行的:全部替换为**
sed '3,5s/:/#/g' passwd 把passwd中3-5行内容中的:全部替换为#
sed '/adm/,/lp/s/:/-/g' passwd 把passwd中/adm/开始的行到/lp/开始的行,这两行之间的所有行中的:替换为-
sed 's/:/##/' passwd 把passwd中每行的第一个:替换为##
sed 's/:/##/g' passwd 把passwd中全文的:替换为##
5-2.输出内容的调整
sed 'G' file 每一行后加以行空格行
sed '$!G' file每一行后加以行空格行除了在最后一行
sed '=' file 每一行都加行号在内容上边
sed '=' file | sed 'N;s/\n//' 每一行都加行号在内容前边
sed -n '$p' file 显示file的最后一行内容
sed ‘G’ file实验效果每一行后加以行空格行