Linux下sed命令使用

含义

sed命令是利用script来处理文本文件。

语法

sed [option] [sed脚本] [文本文件]   或    
sed [option] -f sed脚本文件 [文本文件]   或
sed脚本文件 [option] [文本文件] 

参数解释

-h    帮助
-n    不输出模式空间的内容至屏幕,缺省打印所有行(编辑和未编辑),p命令打印编辑行
-V    显示版本信息
-e    多点编辑,以选项中的script来处理输入的文本文件
-f    当sed命令很长时可以写成文件,用此选项读取
-r    支持使用扩展正则表达式

地址定界

  1. 不给地址,则默认对全文进行处理
  2. 单地址:
    x    指定的行
  3. 地址范围
    x,y    表示行号范围从x到y
    /pattern/    查询包含模式的行,如/disk/或/[a-z]/
    /pattern/pattern/    查询包含两个模式的行,如/disk/disks/
    /pattern/,x    在给定行号上查询包含模式的行,如/disk/,3        
    x,/pattern/    通过行号和模式查询匹配行,如3,/disk/
    x,y!    查询不包含指定行号x和y的行
    $最后一行
  4. 步进
    1~2第一行开始,步进两行
    2~2第二行开始,步进两行

动作说明

a\text               在能够被地址定界圈的行后面追加文本,支持使用\n实现多行追加
c\text               替换行为单行或多行文本
d                    删除被地址定界的行
D                    删除多行模式空间中的所有行
g                    从保持空间取出内容覆盖到模式空间
G                    从保持空间取出内容追加到模式空间
h                    把模式空间中的内容覆盖到保持空间
H                    把模式空间中的内容追加到保持空间
i\text               在行前面插入文本,支持使用\n实现多行插入
l                    显示与八进制ASCII代码等价的控制字符
n                    读取匹配到的行的下一行至模式空间中,并覆盖前一行
N                    追加匹配到的行的下一行至模式空间
p                    打印匹配行
q                    第一个模式匹配完成后退出或立即退出行号
w\path\to\somefile   保存模式空间中匹配到的内容到制定文件中
r\path\to\somefile   读取指定文件的文本流至模式空间中匹配到的行的行后
s///                 查找替换,g为行内全局替换,p为显示替换成功的行,w为将替换成功的结果保存到指定文件中
x                    把模式空间中的内容与保持空间中的内容进行互换  
y                    传送字符
{}                   在定位行执行的命令组 
!                    取反条件  
=                    显示文件行数

具体事例

使用p显示行:         sed -n '2p' testfile
打印范围:            sed -n '1,3p' testfile
打印模式:            sed -n '/test/p' testfile
使用模式和行号查询:   sed -n '3,5{/test/p}' testfile
显示整个文件:         sed -n '1,$p' testfile
任意字符:            sed -n '/.*ing/p' testfile
打印行号:            sed -n '/music/=' testfile
附加文本:            ./script.sed testfile        (见附录脚本文件)
插入文本:            sed -e '$a\adass' testfile 或 sed -e '$i\adass' testfile 
修改文本:            sed -e '4c 123456789' testfile
删除文本:            sed -e '4d' testfile
替换文本:            sed -e 's/abc/cba/g' testfile
sed结果写入到文件:     sed '1,2 w testfile2' testfile 或 sed '/abc/ w testfile2' testfile
sed从文件中读取:      sed '1,2 r testfile2' testfile 或 sed '/abc/ r testfile2' testfile    (待验证用法不对)
从shell向sed传值:    echo $NAME | sed "s/go/$REP/g"            (待验证)

常用用法

's/\.$//g'                删除以句点结尾行的句点
-e '/abcd/d'              删除包含abcd的行
's/  */ /g'               删除一个以上空格,用一个空格代替
's/^ *//g'                删除行首空格
's/^\. */ /g'             删除句号后跟两个或多个空格,用一个空格代替
'/^$/d'                   删除空行
's/^.//g'                 删除第一个字符
's/COL/(...\)//g'         删除紧跟COL的后三个字母
's/^\///g'                删除路径中第一个/

附录

正则表达式

#!/bin/sed -f
/name1/ a\
    here add newline

你可能感兴趣的:(Linux下sed命令使用)