shell脚本之sed

sed 命令

Linux 文本处理三剑客 之 sed
sed stream EDite
作为行编辑器,对文本进行编辑(以行为单位进行编辑)
注意:sed编辑文件,却不改变原文件;
sed的工作原理:
将以此指定文本文件。依次读取文本文件中每行的内容,读取到模式空间中(PATTERN SPACE),在模式空间中进行文本匹配(正则表达式),对匹配后的内容进行修改(替换、删除、打印、答应、修改、保存等)
用法:
sed 【参数】 “sed自己独立的用法格式的语句”【文本文件】
常见选项
-r 拓展的正则表达式
匹配ip地址
所有的都不要 |或者的意思
-n 拒绝默认输出
-e script for while if
-f 指定脚本文件
-l 指定文本换行长度
-i直接修改文件内容
地址定界:
1、直接匹配数值
sed -n `5,7p` fileneme
2、d~步长
sed -n `1-3p` 文件
3、$ 指定行尾
sed -n `10,$p` 文件
4、/正则/
sed -n `/k{5,}/,$p`abc
5、0,addr
addr 可以为数字 /$/正则表达式
sed -n `0,/k{5,}/,p`abc
6、addr +N
配置addr行到,addr 后N行
sed -n `/(as)+/,/(ds)+/` abc
常见命令:
p print 打印(默认在屏幕上显示出来) 建议和-n 一起使用
c 替换行
sed “/aaa/c A”a
d删除
sed “/aaa/d” a
sed "1,3d" a
n N 读取、添加 模式匹配到的行的下一行内容,在对其进行操作
w 保存文件内容到一个新的文件
*S* 文本内容替换 默认替换模式匹配到的第一项
语法格式
s/pattern/字符串
中间的/可以替换为任意一个字符,例如:
g 全部的意思
12 和正则表达式相同,实现反向引用;
指定某一个匹配项进行修改

& 调用前面(pattern)匹配的内容
sed "s/r/&er/g"文件
w
p
练习:
1、删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符
sed `s/^[[:space:]]+//g` /boot/grub/grub.conf
2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白符的行的行首的#和空白符;
sed `s/^#[[:space:]]+//` /etc/fstab
3、给定一个目录,取出其目录命
sed `/[^/]+$//`||dirname +文件名-----取出目录文件的路径部分
4、给定一个目录,取出器文件名
sed `s#^/.*/##` basename +文件名-----取出文件名部分

原文地址:https://www.cnblogs.com/wangshilin/p/11365209.html