sed基础用法

sed基础

sed 行编辑器


  • sed 是一种流编辑器,它一次处理一行的内容,处理时把当前处理的行存储在临时缓冲区中,称为‘模式空间’(pattern space),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间,这样不断重复,直到文件末尾。如果不加特定选项原文件内容并不会改变。除非你使用重定向。
  • 功能 :主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

 用法 : sed [option] … ‘地址命令’ 文件
常用选项

-n :不打印模式空间的内容到屏幕上(默认是打印的)
-e :多点编辑 (sed [optin] -e ” -e ”)
-f :/ PATH/SCRIPT_FILE : 从指定文件中读取编辑脚本
-r :支持使用扩展正则表达式
-i.bak : 备份文件并原处编辑
地址范围:
不给地址 :对全文进行处理
单地址 :# :指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
地址范围 :
#, # :1,3 从第一行到3行
#,+# :3,+5 从第3行到8行。
/pat1/,/pat2/ :符号这两个正则表达的行
#,/pat1/ :第#行符号这个正则表达式的内容

 ~ :步进 (去文本的奇偶行)

1~2 :奇数行 :从第1行开始,每次加2行 1,3,5…..
2~2 :偶数行 :从第2行开始,每次加2行 2,4,5…..

编辑命令

  • d: 删除模式空间匹配的行,并立即启用下一轮循环
  • p: 打印当前模式内容,追加到默认输出之后
  • a[\]: 在指定行后面追加文本,支持使用\n实现多行追加
  • i[\]: 在行前面插入文本
  • c[\]: 替换行为单行或者多行文本
  • w /path/somefile : 保存模式匹配的行至指定文件
  • r /path/somefile : 读取指定文件的文本至模式空间中匹配到的行后
  • = :为模式空间中的行打印行号
  • !:模式空间中匹配行取反处理
  • s/// :查找替换,支持首页其它分隔符s@@@ ,s___,s###
  • 替换标记:
    • g :行内全部替换,不加只会替换第一个匹配的
    • #g :替换#个
    • p : 显示替换成功的行
    • w /PATH/TO/SOMEFILE :将替换成功的行保存至文件中

示列

sed ‘2p’ /etc/passwd 第2行打印两边
sed -n ‘2p’ /etc/passwd 只打印第2行
sed -n ‘1,4p’ /etc/passwd 打印1到4行
sed -n ‘/root/p’ /etc/passwd 显示文本中匹配到的root的行
sed -n ‘2,/etc/passed/p’ 从第二行开始匹配
sed -n ‘/^$/=’ file 显示匹配的空白行的行号
sed -n -e ‘/^$/p’ -e ‘/^$/=’ file 打印出空白行和显示出空白行行号
sed ‘/root/i\superman’ /etc/passwd 在/etc/passwd 行前添加一行 文字
sed ‘/root/a\asdf’ /etc/passwd 在匹配行的后添加一行文字
sed ‘/root/c\abc’ /etc/passwd 将匹配的行替换成abc
sed ‘/^&/d’ file 删除空白行
sed ‘1,10d’ file 删除第一行到第10行
nl /etc/passwd | sed ‘2,5d’ 删除2到5行
nl /etc/passwd | sed ‘2a abc’ 在匹配到行后面添加一行为abc
sed -n ‘s/root/&abc/p’ /etc/passwd 在root单词后面追加abc 然后 输出
sed -n ‘s/root/abc&/p’ /tc/passwd 在root单词前面追加abc
sed ‘s/test/mytest/g’ file 将匹配的文字全行替换
sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets
sed -i.bak ‘s/dog/cat/g’ pets 将dog全行替换成cat ,然后备份原文 件后缀.bak,把模式空间的内容写入原文件。

高级编辑命令

  • p :打印模式空间开端至\n内容,并追加到默认输出之前
  • h :把模式空间中的内容覆盖至保持空间中
  • H :把模式空间的内容追加至保持空间中
  • g :从保持空间中取出内容覆盖至模式空间中
  • G :从保持空间中取出内容追加到模式空间中
  • x :把模式空间中的内容与保持空间中的内容进行互换
  • n :读取匹配到的行的下一行覆盖至模式空间中
  • N :读取匹配的行的下一行追加至模式空间中
  • d :删除模式空间中的行
  • D :如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环
  • sed ”可以使用对个命令用;号分隔
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章