シェルの基本-ストリームエディターsed

   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              将行写入文件

おすすめ

転載: blog.csdn.net/xiaoan08133192/article/details/112664709