sed 工作原理
sed将原文内容弄到缓存池中,在缓存池中修改原数据,别不直接修改。
执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
显示:发送修改后的内容到输出流,再发送数据后,模式空间将会被清空。
语法
Sed [选项] ‘操作/ /参数’ /file/to/path
Sed [选项] -f 脚本文件 参数
选项:
-n:取消默认输出。
e:允许执行多个脚本。
-f:从脚本文件中读取命令。
-i:直接修改原始文件。
-l:指定行的长度。
-r:在脚本中使用扩展正则表达式。
-s:默认情况下,sed将把命令行指定的多个文件名作为一个长的连续的输入流。
-u:最低限度的缓存输入与输出。
commands可以用正则表达式。
操作:
a:增加,在当前行下面增加一行指定内容。
c:替换,将选定行替换为指定内容。
i:插入,在选定行上面插入一行指定内容。
p:打印,如果同时指定行,表示打印指定行,如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输入。其通常与“-n”选项一起使用。
s:替换,替换指定字符,例如 “”1,20s/old/new/g”表示将1到20行的所有字符“old”替换为“new”。
y:字符转换。
参数:
g:这个参数将多行的原字符转换为新字符,加上行数是将指定的行数区间内的原字符替换成新字符。
d:删除,删除选定的行。
例如,sed -i ‘s/原字符/新字符/g’ file #将文件中所有的原字符都替换成新字符。
sed -i ‘s/原字符/新字符/4,5g’ file #将文件中的四行五行的原字符替换成新字符
实列
cat /etc/fstab
# /etc/fstab
# Created by anaconda on Sat Feb 20 11:22:22 2021
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=59d31062-3a6d-4393-a0fd-74d8fed7e42c /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sdb1 /data ext4 defaults 0 0
/dev/sdb2 /databackup ext4 defaults 0 0
删除/etc/fstab 中的“
/dev/sdb1 /data ext4 defaults 0 0
/dev/sdb2 /databackup ext4 defaults 0 0
” 。
sed -ir “/^/dev/sdb1/d” /etc/fstab
sed -ir “/^/dev/sdb2/d” /etc/fstab
命令解析
-I 在文件生效。
-r 使用正则表达式
“/^/dev/sdb1/d” /dev/sdb1 开头的行,可以使用正则表达式^ ,由于 / 在sed 有特殊含义我们使用转义符 “\” 转义。 参数d删除选定的行
/etc/fstab 文件名