sed命令
流编辑器,以行为单位进行编辑;
sed编辑文件但不改变原文件;
sed命令有模式空间(PATTERN),文件按行的的形式传入模式空间进行处理
1、常见选项
-n // 拒绝默认显示
-r // 指定使用拓展的正则表达式
-e 脚本 // for while if
-f // 指定脚本文件
-l // 指定文件换行长度
-i // 直接修改文件内容(一般情况下不用使用)
2、地址定界方式
2、1直接匹配数值
sed -n ‘5,7p’ 文件 // 匹配5到7 行
2、2 d ~ 步长
Sed -n ‘1 ~ 3p’ 文件
2、3 $ 指定行尾(.代表光标所在当前行,可以用来vim的多行注释)
Sed -n ‘10,$p’ 文件
2、4 /正则/
/pattern1/,/pattern2/ /正则1/,/正则2/ 第二种模式
例:
sed -n ‘/k\{5,\}/,$p‘ abc sed -n ‘/\(fd\)\+/,+2p‘ abc
2、50,addr
addr可以是数字/$/正则表达式
例: sed -n ‘0,/k\{5,\}/p‘ abc
2、6 addr,N
配置addr行到addr后N行
例: sed -n ‘/fd/,+5p ‘ abc
3、*常见命令
p // print 打印 (默认在屏幕上显示出来) 建议和-n一起使用;
i // 在匹配行的上一行添加指定内容
sed “/aaa/i \A” a
a // 在匹配行的下一行添加指定内容
sed “/bbb/a \B” c
c // 替换行
sed “/aaa/c \A” a
d // 删除
n // N 读取/添加 模式匹配到行的下一行内容,在对其进行操作
w // 保存文件内容到一个新的文件
*s* // 文本内容替换,默认替换模式空间匹配到第一项(语法格式:s/需要替换的/替换后的/)
g // 与s一起用可以全部替换
& // 在字符串内容中应用pattern匹配到内容
练习:
1)删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符;
sed ‘s/^[[:space:]]\+//g‘ /boot/grub/grub.conf
2)删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行 的行首的#和空白字符;
sed ‘s/^#[[:space:]]\+//g‘ /etc/fstab
3)给定一个目录,取出其目录名
echo "/etc/passwd" | sed ‘s/[^/]\+$//‘
4)给定一个目录,取出其文件名
echo "/etc/passwd" | sed ‘s#^/.*/\(.*\)##
原文:https://www.cnblogs.com/yxq-123/p/11379652.html