删除文件中1-10行的数据
sed -e '1,10d' ./myfile.txt

删除文件中以#开头的行,即删除注释
sed -e '/^#/d' ./myfile.txt

将每行第一次出现的xingdong替换成action
sed -e 's/xingdong/action/' ./myfile.txt

将每行所有的xingdong替换成action
sed -e 's/xingdong/actio/g' ./myfile.txt

把结果存储到文件
sed -e 's/xingdong/actio/g' ./myfile.txt > ./newfile.txt
或者
sed -i 's/xingdong/actio/g' ./myfile.txt

使用sed--格式
命令行格式
sed [options] 'command' file(s)
options -e;-n
command 行定位(正则) + sed命令(操作)

命令行格式举例

  1. sed -n '/root/p'
  2. sed -e '10,20d' -e 's/false/true/g'

基本操作命令

  1. -p 打印相关的行 需要和 -n 配合 sed -n 'p' /etc/passwd
  2. -a(新增行) /i(插入行) 新增是在某行之后,插入是在之前
    -c(替代行)
    -d(删除行)
    nl /etc/passwd | sed '1,5i===' //在1-5行之前插入===
    nl /etc/passwd | sed '5i===' //在5行之前插入===
    sed '/^$/d' dt.php //去除空行
  3. -s(行首个字符替换) : 分隔符/,# 等
    -g(全局替换)
    sed -e 's/xingdong/actio/g' ./myfile.txt
    sed -e 's/xingdong/action/' ./myfile.txt

高级操作命令
(1)
-{}:多个sed命令,用;分开
nl passwd|sed '{20,30d;s/false/true/}'
(2)
-n 读取下一个输入行(用下一个命令处理)
nl /etc/passwd |sed -n '{n;p}' //打印偶数行 同 nl /etc/passwd |sed -n '2~2p'
nl /etc/passwd |sed -n '{p;n}' //打印奇数行 同 nl /etc/passwd |sed -n '1~2p'
(3)

  • &:替换固定字符串
    cat /etc/passwd|sed 's/^[a-z]+/& /'
    案例1:大小写的转换
    元字符 \u\l\U\L :转换为大写/小写字符
    cat /etc/passwd|sed 's/^[a-z]+/\U&/' //把用户名转换成大写
    cat /etc/passwd|sed 's/^[a-z]+/\u&/' //把用户名首字母转换成大写
    ls .php| sed 's/^\w+/\U&/' //把所有php文件名转换成大写
    cat /etc/passwd| sed 's/([a-z]+):x:([0-9]+):([0-9]+).
    $/\1:\2:\3/' //取 用户名:uid:gid
    (4)
    -( ):替换某种(部分)字符串(\1,\2)
    ifconfig eth0 | sed -n '/inet/p'| sed 's/inet ([0-9.]+).*$/\1/' // 取ip
    (5)
    -r:复制指定文件插入到匹配行
    -w:复制匹配行拷贝到指定文件里
    sed '1r 123.txt' abc.txt //复制123.txt的文件内容到 abc.txt第一行后面,文件内容没改变
    sed '1w abc.txt' 123.txt //复制123.txt内容的第一行到abc.txt中(清空然后写入)
    sed 'w abc.txt' 123.txt //复制123.txt内容到abc.txt中(清空然后写入)
    (6)
    q:退出sed
    nl /etc/passwd | sed '/daemon/q' //找到daemon所在的行然后退出
    nl /etc/passwd | sed '10q' //读取到第10行退出

sed -f scriptfile file(s)