sed是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区的内容,处理完后,把缓冲区的内容送往屏幕。
需要注意的是,sed不管是否找到指定的模式,它的退出状态都是0,只有当命令存在语法错误时,sed的退出状态才是非0。
下面介绍sed的使用语法:
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
注意'd'表示删除(每读一行到模式空间都删除),'4d'表示只删除第4行,'4,7d'表示删除4到7行。
'p'表示打印,如果在options中加入了-n表示打印时忽略默认的输出内容。
sed与grep一样,sed在文件中查找模式时也可以使用正则表达式和各种元字符。正则表达式是括在斜杠间的模式,用于查找和替换。
注意命令行中的options一般要使用-r,这样一来使用正则表达式的时候就可以使用扩展字符了。
命令sed -r -n '/^root/p' /etc/passwd表示打印/etc/passwd文件下以root开头的行。
命令sed -r '/root/d' passwd表示在模式空间中删除带有root的行,而没有在文件中真正的删除,如果想要在文件中真正的删除,需要把-r换成-rn。
如果需要对特定的行进行操作的时候就需要使用地址的概念。
地址用于决定对哪些行进行编辑。地址形式可以是数字、正则表达式或二者的结合。如果没有指定地址,sed将处理输入文件中的所有行。
**下面详细介绍sed定址**
sed -r 'd' /etc/passwd 删除文件中的所有行
sed -r '3d' /etc/passwd 删除文件中的第3行
sed -r '1,3d' /etc/passwd 删除文件中的1到3行
sed -r '/root/d' /etc/passwd 删除文件中的带有root的行
sed -r '/root/!d' /etc/passwd 删除文件中不带有root的行
sed -r '/root/,+5d' /etc/passwd 删除文件中带有root往下的5行,包括root行
sed -r '/^root/,5d' /etc/passwd 删除文件中以root开头的行以及第5行中间的行
需要注意的是这里的删除时在模式空间中删除,并不是直接在文件中删除。
**下面介绍sed的命令**
sed命令告诉sed对指定行进行何种操作,包括打印、删除、修改等。
命令 功能
a 在当前行后添加一行或多行
c 用新文本修改(替换)当前行中的文本
d 删除行
i 在当前行之前插入文本
**s 用一个字符串替换另一个
s 替换标志
g全局替换
i忽略大小写**
r 从文件中读入
sed -r '2r /etc/hosts' a.txt 处理到文件a.txt第二行的时候,把文件/etc/hosts的内容添加到第二行后面
sed -r '/2/r /etc/hosts' a.txt 处理到文件a.txt带有2的行的时候,把文件/etc/hosts的内容添加到这些行的后面
w 将行写入文件
シェルの基本-ストリームエディターsed
おすすめ
転載: blog.csdn.net/xiaoan08133192/article/details/112664709
ランキング