sed: Stream Editor
行编辑器 逐行编辑
将每行内容读入到内存中,在内存中进行处理,将结果返回给屏幕 ,此段内存空间称为模式空间
默认不编辑原文件,仅对模式空间的数据进行处理,处理结束后,将模式空间的内容显示到屏幕
sed命令的使用格式
sed [options] 'AddressCommand' file ...
Address:表示对哪些行进行处理
Command:操作命令
options:
-n:不再显示模式空间中的内容(默认显示)
-i: 直接修改原文件
-e 'AddressCommand' -e 'AddressCommand':同时执行多个匹配操作
-f file_name 将多个AddressCommand保存至文件中,每行一个AddressCommand;读取该文件中的操作同时执行多个操作
-r:表示使用扩展正则表达式
Address表示方法:
1、StartLine,EndLine
1,100
$表示最后一行
1,$
2、/Regex/
/oot/
/^oot/
3、/Regex1/,/Regex2/
第1次被Regex1匹配的行开始,到第1次被Regex2匹配的行中间的所有行
4、LineNumber
10
精确匹配特定的行
5、StartLine,+N
1,+3
从startline开始,向后的N行
Command:
d 删除符合条件的行
# sed '1,2d' /etc/inittab
删除文件中包含oot的行
# sed '/oot/d' /etc/fstab
删除第1行及其后2行
# sed '1,+2d' /etc/fstab
删除第1行
# sed '1d' /etc/fstab
删除以/开头的行
# sed '/^\//d' /etc/fstab
p 显示符合条件的行
显示以/开头的行
# sed -n '/^\//p' /etc/fstab
a \string 在符合条件的行后追加新行,string为追加的内容
在以/开头的行后面追加# hello world
# sed '/^\//a \# hello world' /etc/fstab
在以/开头的行后面追加两行内容,分别为# hello worl # hello linux
# sed '/^\//a \# hello world\n# hello linux' /etc/fstab
i \string 在符合条件的行前添加新行,string为追加的内容
在文件第1行添加# hello world
# sed '1i \# hello world' /etc/fstab
r file_name 将指定文件的内容添加到符合条件的行的后面
在文件的第2行后追加/etc/issue文件的内容
# sed '2r /etc/issue' /etc/fstab
w file_name 将符合条件的内容另存到指定文件中
将以UUID开头的行另存为到/1.txt中
# sed '/^UUID/w /1.txt' /etc/fstab
s/regex/string/[修饰符] 查找并替换(默认情况下只替换每一行第1次被匹配的字符)
修饰符:
g:替换每一行所有的字符
i:忽略大小写
查找文件中的UUID,并替换为uuid
# sed 's/UUID/uuid/' /etc/fstab
将行首的/替换成#
# sed 's/^\//#/' /etc/fstab
将每一行出现的所有/替换为@
# sed 's/\//@/g' /etc/fstab
反向引用 \(\) \1 \2
将文件中以l..e替换为l..er,例如love替换为lover
# sed 's/\(l..e\)/\1r/g' /etc/fstab
或
# sed 's/l..e/&r/g' /etc/fstab
&:引用正则表达式匹配的所有字符串
将文件中l..e的单词替换为L..e,例如love替换为Love
# sed 's/l\(..e\)/L\1/' /1.txt
删除行首的空格
# sed 's/^[[:space:]]*//' /etc/fstab
= 用于显示每一行的行号
显示/etc/passwd文件最后一行的行号
# sed -n '$=' /etc/passwd
49
c \string 替换指定行的内容
将文件中最后一行内容替换为End Of File
# sed '$c \End Of File' /1.txt
sed示例:
1、删除/etc/grub.conf文件中行首的空白字符
# sed 's/[[:space:]]*//' /etc/grub.conf
2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5
# sed 's/\(id:\)3\(:initdefault:\)/\15\2/' /etc/inittab
3、删除/etc/inittab文件中的空白行
# sed '/^$/d' /etc/inittab
4、删除/etc/inittab文件中开头的#号
# sed 's/^#//' /etc/inittab
5、删除某文件中开头的#号,但要求#号后面必须有空白字符
# sed 's/^#[[:space:]]\+//' /1.txt
6、删除某文件中以空白字符后面跟#号的行中的开头的空白字符及#
# sed 's/^[[:space:]]\+#//' /1.txt
2016-11-16
sed总结[群]
评论
发表评论
姓 名: