sed [选项] [动作] 文件 选项: -n :静默模式。使用-n则只有经过sed处理的那一行。 -e :允许多重编辑; -f :结果默认输出到终端,使用-f会将结果写在一个文件内 -i :直接对原文件进行修改。(危险) -p :打印模式空间的内容 s/regexp/replacement/flag 用replacement替换模式空间由regexp匹配到的内容
动作:
[n1[,n2]]function n1, n2 :表示范围,可以省略function:
a xxxxx:将xxxx添加到匹配到的行的后一行 d :删除所匹配到的行 i xxxxx:将xxxx添加到匹配到的行的前一行 p :打印输出所匹配到的行,通常 p 会与参数 sed -n 一起运行 s :取代,替换指定的字符串 c :以行为单位进行替换应用举例:
1、找出包含数字 0 的行
# sed -n '/0/p' /tmp/passwd # nl /tmp/passwd | sed -n '/0/p' 1、找出包含任意数字的行 # sed -n '/[0-9]/p' /tmp/passwd 2、查找不包含数字 0 的行 # sed '/0/d' /tmp/passwd2、删除前5行中,包括数字0的行
3、将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除! # nl /etc/passwd | sed '2,5d' 1 root:x:0:0:root:/root:/bin/bash 6 sync:x:5:0:sync:/sbin:/bin/sync 7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown4、只要删除第 2 行
# nl /etc/passwd | sed '2d' 5、要删除第 3 到最后一行 # nl /etc/passwd | sed '3,$d' 6、在第二行后追加一行i am zxhk # nl /etc/passwd | sed '2a i am zxhk'7、在第二行前追加一行i am zxhk
# nl /etc/passwd | sed '2i i am zxhk'6、在第二到第五行每行后都追加一个i am zxhk
# nl /tmp/abc | sed '2,5a i am zxhk' 7、在第二行前追加两行i am zxhk 和 i come from china # nl /etc/passwd | sed '2a i am zxhk\ > drink beer ?'8、将第2-5行的内容替换成为"i am zxhk"(以行为单位的替换与显示)
# nl /tmp/abc | sed '2,5c i am zxhk'9、仅列出 /etc/passwd 文件内的第 5-7 行内容
# nl /etc/passwd | sed -n '5,7p'10、搜索/etc/passwd有root关键字的行
# nl /etc/passwd | sed '/root/p'11、删除/etc/passwd所有包含root的行
# nl /etc/passwd | sed '/root/d'12、将/etc/passwd中包含root的行中的bash替换为blueshell
# nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}' (找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔)数据的搜寻并替换 sed 的搜寻与替代的与 vi 相当的类似! 格式: sed 's/要被取代的字串/新的字串/g' 13、获取本机的ip信息,如下:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 # ifconfig eth0 | sed -n "/inet addr/{s/^[[:space:]]*//g;p}" 14、获取IP地址(后面的部分予以删除) # ifconfig eth0 | sed -n "/inet addr/{s/^[[:space:]].*addr://;p}" | sed -n '/cast/{s/[[:space:]].*//g;p}' # ifconfig eth0 | sed -n "/inet addr/{s/^[[:space:]].*addr://;s/[[:space:]].*//g;p}" 15、将sysctl.conf中的net.ipv4.ip_forward = 0改为1
16、将apache的配置文件中的#ServerName www.example.com:80行首的#去掉
# sed 's/^#\(ServerName www\)/\1/' /etc/httpd/conf/httpd.conf17、删除file.txt中的注释行和空白行
# sed -e '/#/d' -e '/^$/d' file.txt直接修改文件内容(危险动作)
18、利用 sed 将file.txt 内每一行结尾若为 . 则换成 ! # sed -i 's/\.$/\!/g' file.txt 19、利用 sed 直接在 file.txt 最后一行加入『# This is a test』 # sed -i '$a # This is a test' file.txt 注意: $ 代表的是最后一行,a 的动作是新增,因此该文件最后新增『# This is a test』!sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助
Author:潇湘雨错