sed小结

sed:编辑器

sed:Stream EDitor,行编辑器

用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...

常用选项:

-e:多点编辑

-f /PATH/TO/SCRIPT_FILE:从指定文件中读取编辑脚本:

-r:支持使用扩展正则表达式

-n:不输出模式中的内容至屏幕

-i: 原处编辑

!:取反条件

s/查找的条件/替换的内容/:

[email protected]@@ s###

编辑命令:

a,append表示追加指令

i,insert表示插入指令

d,delete表示删除指令

s,substitution表示替换指令

p,显示模式空间中的内容

w /path/to/somefile:保存模式空间中的内容到指定文件中

r /path/to/somefile: 读取指定文件的文件流至模式空间中的行(能匹配到的行)

=:为模式空间中的行打印行号

关于d删除的用法:

[[email protected] ~]# cat /etc/fstab

#

# /etc/fstab

# Created by anaconda on Tue Jul  5 23:40:37 2016

#

# 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

#

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

# 删除以UUID开头的行:

[[email protected] ~]# sed ‘/^UUID/d‘ /etc/fstab

#

# /etc/fstab

# Created by anaconda on Tue Jul  5 23:40:37 2016

#

# 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

#

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

# 删除以#开头的行

[[email protected] ~]# sed ‘/^#/d‘ /etc/fstab

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

You have new mail in /var/spool/mail/root

# 删除空白行

[[email protected] ~]# sed ‘/^$/d‘ /etc/fstab

#

# /etc/fstab

# Created by anaconda on Tue Jul  5 23:40:37 2016

#

# 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

#

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

# 在/tmp/fst的第二行后面插入"wanwan=3"

[[email protected] ~]# sed -i ‘2a wanwan=3‘ /tmp/fst

You have new mail in /var/spool/mail/root

[[email protected] ~]# cat /tmp/fst

#

wanwan=3

# /etc/fstab

# Created by anaconda on Tue Jul  5 23:40:37 2016

#

# 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

#

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

# 将“wanwan=3”替换成“wanwan=5”

[[email protected] ~]# sed -i ‘s/wanwan=3/wanwan=5/g‘ /tmp/fst

[[email protected] ~]# cat /tmp/fst

#

I am the third

I am the forth/p

wanwan=5

# /etc/fstab

# Created by anaconda on Tue Jul  5 23:40:37 2016

#

# 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

#

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

# 删除1-5行的内容,i(inplace)直接就可以生效了,建议先测试后,然后再用“-i”参数

[[email protected] ~]# sed -i ‘1,5d‘ /tmp/fst

[[email protected] ~]# cat /tmp/fst

# /etc/fstab

# Created by anaconda on Tue Jul  5 23:40:37 2016

#

# 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

#

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

# 在UUID的行后,直接加上“TYPE=test”

[[email protected] ~]# cat /tmp/fst

# /etc/fstab

# Created by anaconda on Tue Jul  5 23:40:37 2016

#

# 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

#

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

[[email protected] ~]# sed ‘/^UUID/a TYPE=test‘ /tmp/fst

# /etc/fstab

# Created by anaconda on Tue Jul  5 23:40:37 2016

#

# 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

#

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

TYPE=test

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

TYPE=test

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

TYPE=test

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c swap                    swap    defaults        0 0

TYPE=test

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

在#行开头的后面添加一行内容

[[email protected] ~]# sed ‘/^#/a \#我们需要努力!‘ /tmp/fst

# /etc/fstab

#我们需要努力!

# Created by anaconda on Tue Jul  5 23:40:37 2016

#我们需要努力!

#

#我们需要努力!

# 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

#我们需要努力!

#

#我们需要努力!

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

在#行开头的前面添加一行内容"我们不要放弃!"

[[email protected] ~]# sed ‘/^#/i \#我们不要放弃!‘ /tmp/fst

#我们不要放弃!

# /etc/fstab

#我们不要放弃!

# Created by anaconda on Tue Jul  5 23:40:37 2016

#我们不要放弃!

#

#我们不要放弃!

# 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

#我们不要放弃!

#

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

#将/etc/fstab中将以UUID开头的行存入到/root/fstab中

[[email protected] ~]# sed -n ‘/^UUID/w /root/fstab‘ /etc/fstab

[[email protected] ~]# cat /root/fstab

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c swap                    swap    defaults        0 0

# 将/root/write.txt文件读入到/etc/fstab的第六行

[[email protected] ~]# awk -F ":" ‘{print $1}‘ /etc/passwd|head -5>/root/write.txt

[[email protected] ~]# cat /root/write.txt

root

bin

daemon

adm

lp

[[email protected] ~]# sed ‘6r /root/write.txt‘ /etc/fstab

#

# /etc/fstab

# Created by anaconda on Tue Jul  5 23:40:37 2016

#

# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘

root

bin

daemon

adm

lp

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

#对write.txt文件执行sed.sh脚本指令

[[email protected] ~]# cat sed.sh

# this is a test sed command

/^$/d

[[email protected] ~]# sed -f sed.sh write.txt

root

oo

bin

daemon

adm

lp

案例:

练习1:删除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符

[[email protected] ~]# cat /boot/grub/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda5

#          initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS 6 (2.6.32-573.el6.x86_64)

root (hd0,0)

kernel /tboot.gz logging=vga,serial,memory

module /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 intel_iommu=on amd_iommu=on rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=128M LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet

module /initramfs-2.6.32-573.el6.x86_64.img

[[email protected] ~]# sed ‘s#^[[:space:]]\+##‘ /boot/grub/grub.conf

# grub.conf generated by anaconda

#

# Note that you do not have to rerun grub after making changes to this file

# NOTICE:  You have a /boot partition.  This means that

#          all kernel and initrd paths are relative to /boot/, eg.

#          root (hd0,0)

#          kernel /vmlinuz-version ro root=/dev/sda5

#          initrd /initrd-[generic-]version.img

#boot=/dev/sda

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS 6 (2.6.32-573.el6.x86_64)

root (hd0,0)

kernel /tboot.gz logging=vga,serial,memory

module /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 intel_iommu=on amd_iommu=on rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=128M LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet

module /initramfs-2.6.32-573.el6.x86_64.img

练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首和空白字符

[[email protected] ~]# sed ‘[email protected]^#[[:space:]]\[email protected]@‘ /etc/fstab

#

/etc/fstab

Created by anaconda on Tue Jul  5 23:40:37 2016

#

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

#

UUID=922eb46f-7e6e-4670-8bf1-6f9f1b05a053 /                       ext4    defaults        1 1

UUID=3881dbb7-5500-4eff-ba82-17651d436ce5 /boot                   ext4    defaults        1 2

UUID=419bb1cd-93b2-403b-9bf2-847d3072248b /tmp                    ext4    defaults        1 2

UUID=bcb87417-3008-4fcc-80d7-41c3ef9ff96c 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

练习3:echo一个绝对路径路径sed命令,取出其基名:取出其目录名

目录名称:

[[email protected] ~]# echo "/etc/sysconfig"|sed ‘[email protected][^/]\+/\[email protected]@‘

/etc/

[[email protected] ~]# echo "/etc/sysconfig/"|sed ‘[email protected][^/]\+/\[email protected]@‘

/etc/

基名:

[[email protected] ~]# echo "/etc/sysconfig/" | sed -r ‘[email protected]^/.*/([^/]+)/[email protected]\[email protected]‘

sysconfig

[[email protected] ~]# echo "/etc/sysconfig" | sed -r ‘[email protected]^/.*/([^/]+)/[email protected]\[email protected]‘

sysconfig

# 执行多个指令的方法

[[email protected] tmp]# cat eth0

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=dhcp

方法1:

[[email protected] tmp]# sed -e ‘s/yes/no/‘ -e ‘s/eth0/ens32/‘ eth0

DEVICE=ens32

TYPE=Ethernet

ONBOOT=no

NM_CONTROLLED=no

BOOTPROTO=dhcp

方法2:利用分号隔开

[[email protected] tmp]# sed ‘s/yes/no/;s/eth0/ens32/‘ eth0

DEVICE=ens32

TYPE=Ethernet

ONBOOT=no

NM_CONTROLLED=no

BOOTPROTO=dhcp

方法3:利用分行

[[email protected] tmp]# sed ‘

> s/yes/no/

> s/eth0/ens32/‘ eth0

DEVICE=ens32

TYPE=Ethernet

ONBOOT=no

NM_CONTROLLED=no

BOOTPROTO=dhcp

# 操作地址匹配

sed -n ‘1~2p‘ /etc/passwd

# 删除/tmp/passwd的前5行

[[email protected] tmp]# head -10 /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

删除后,然后进行对比:

[[email protected] tmp]# sed -i ‘1,5d‘ /tmp/passwd

[[email protected] tmp]# cat /tmp/passwd |head -10

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

# 替换第二个body位/body

[[email protected] ~]# cat test.txt

<html>

<title>First Web</title>

<body>hello world!<body>

</html>

[[email protected] ~]# cat sed.sh

/body/{

s//\/body/2

}

[[email protected] ~]# sed -f sed.sh test.txt

<html>

<title>First Web</title>

<body>hello world!</body>

</html>

# 利用 sed 直接在 /tmp/passwd 最后一行加入『# This is a test』

# sed -i ‘$a # This is a test‘ /tmp/passwd

# 先不用-i命令,进行测试下

[[email protected] ~]# sed ‘$a # this is a test‘ /tmp/passwd |tail -5

awx:x:988:985::/var/lib/awx:/bin/bash

li4:x:1011:1011::/home/li4:/bin/bash

admin:x:1012:1012::/home/admin:/sbin/nologin

monitor:x:1013:1013::/home/monitor:/bin/bash

# this is a test

说明:

a)由于$代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』!

b)sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!

c)举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?

就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!

#在/tmp/passwd第二行后面添加"# this is a test"

[[email protected] ~]# sed ‘2a # this is a test‘ /tmp/passwd |head -5

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

# this is a test

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

# 利用 sed 将passwd内每一行结尾若为 . 则换成 !

[[email protected] tmp]# cat passwd

James is a good man .

Kobe is good at IT .

I love Linux.

welcome to linux.

[[email protected] tmp]# sed ‘s/\.$/\!/g‘ passwd

James is a good man !

Kobe is good at IT !

I love Linux!

welcome to linux!

使用-i参数才会真正的生效

# sed的知识扩展

在sed的工作原理图中我们了解到,sed不仅存在模式空间,也存在一个保持空间(hold space)。顾名思义,保存空间是一段sed独有的内存空间片段,可以暂时存放一些数据。

其中与“保持空间”相关的编辑命令有:

h:把模式空间中的内容覆盖到保存空间中的内容

H:把模式空间中的内容追加到保存空间中(加在原有内容之后)

g:把保持空间中的内容覆盖到模式空间中的内容

G:把保持空间中的内容追加到模式空间中(加在原有内容之后)

x:把模式空间中的内容和保持空间中的内容进行交换

d:删除模式空间中的内容

D:如果模式空间中的内容为多行时,删除模式空间中的第一行

n:读取匹配到的行的下一行到模式空间中(覆盖原内容)

N:读取匹配到的行的下一行到模式空间中(追加在原内容之后)

例如:显示偶数行的时候就可以这样实现:sed -n ‘n;p‘ FILE

时间: 2024-10-18 21:37:49

sed小结的相关文章

Sed和Awk简介

Sed:"交互式"面向字符流的编辑器. 使用sed小结: 1. 在一个或多个文件上自动实现编辑操作 2. 简化对多个文件执行相同的编辑处理工作 3. 编写转换程序 awk能够完成的一些工作: 1. 将文本文件看作由记录和字段组成的文本数据库 2. 使用变量操作数据库 3. 使用算术和字符串操作符 4. 使用普通的程序设计结构,例如循环和条件 5. 生成格式化报表 6. 定义函数 7. 从脚本中执行UNIX命令 8. 处理UNIX命令的结果 9. 更加巧妙的处理命令行的参数 10. 更容

Linux sed命令小结

1.什么是sed sed,流编辑器,即stream editor.它可以将文本文件的每一行读取到内存,即所谓sed的模式空间,在这个模式空间中可以进行编辑并输出. 2.sed的使用格式 sed [options] "AdressCommand" file1,file2,... 说明: a.Adress实际上是用来确定编辑文件的范围,可以是精确的某一行,也可以是从某一行到某一行,也   可以用正则进行过滤匹配. b.Command表示将符合Address的行进行XXX操作.注意默认情况下

sed用法小结

在linux的学习和使用中,sed,awk,grep的用法的重要性不言而喻,本文从以下几个方面小结了sed的用法: 1.sed的含义 sed 是stream editor:就是流编辑器,和我们用到的vi是不同的,vi是全屏编辑器.而且sed是逐行将文件内容取入到内存,进过sed中指定命令进行处理,然后输出到屏幕的. 2.sed的用法及格式 sed [options] 'StartAdd,EndAddCommand' files,... [options] 指的是sed的选项.可以省略 Start

sed与awk命令小结

1.sed命令小结 Sed是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑,标准输入可以是来自键盘输入.文件重定向.字符串.变量,甚至来自管道的文本.Sed从文本的一个文本行或标准输入中读取数据,将其复制到缓冲区,然后读取命令行或脚本的第一个命令,对此命令要求的行号进行编辑,重复此过程,直到命令行或脚本中的所有命令都执行完毕.相对于vi等其他文本编辑器,sed可以一次性处理所有的编辑任务,显得非常高效,为用户节省了大量的时间. 1. 语法:sed [OPTION]... {script

linux中sed学习小结

sed行处理工具 1.显示文件中匹配行 cat tmp.txt|sed -n '/匹配字符正则/p' (-n是不打印全部文件) 2.显示文件第几行 cat tmp.txt|sed -n '1p' --第一行-- cat tmp.txt|sed -n '1,3p' --一到三行-- 3.替换文件中字符 cat tmp.txt | sed 's/ee/ff/' 或者 sed 's/ee/ff/' tmp.txt --将tmp.txt文件中每行第一个匹配的ee替换为ff,不改变原文件-- cat tm

linux下的sed命令小结

sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出.Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. 默认情况下,sed的所有处理行为不会影响源文件的内容:我们一般会使用sed命令来自动编辑一个或多个文件,简化对文

Linux中使用sed命令替换字符串小结

sed替换的基本语法为: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如: sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号 命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”: sed 's?原字符串?替换字符串

sed 命令小结

sed:过滤和转换的文本编辑器,主要是针对行的编辑,一次只能一行        用法:sed [option] {script} filename        参数:                 -n:取消默认输出                 -e:用于多重编辑                 -i:用于改变替换的内容                 -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作        

sed 命令学习小结

sed [-nefr] [动作] 参数: -n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN的数据一般都会被列出到屏幕上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e :直接在指令列模式上进行 sed 的动作编辑: -f :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作: -r :sed 的动作支持的是延伸型正规表示法的语法.(预设是基础正规表示法语法