sed 命令的一些用法

回复 收藏
本帖最后由 xiaoqing757 于 2016-3-8 10:18 编辑

参数
-i         #  将修改保存到文件
-e       # 在命令行运行多条sed命令
-n       # 打印由p命令指定的行
-f        # 指定sed命令脚本文件
-r        #使用扩展正则表达式

替换标记,4种可用的替换标记
       s/pattern/replacement/flags
    数字,替换一行中第几次模式匹配的地方
    g     替换一行中所有匹配的地方
    p     打印匹配的行
    w  file  ,将替换结果写到文件file中,只写匹配的内容
    数字寻址,用数字来指定行
  1. # -i 参数的一个用法
  2. sed -i.bak 's/bin/sbin/g' /etc/passwd
  3. # 此命令会在修改文件前备份,并以.bak为后缀
行地址:
  1. sed -n '2,5p'  /etc/passwd                # 打印2-5行
  2. sed '1,10d' /etc/passwd                  # 删除1-10行
  3. # 最后一行可以用 $ 表示,例如3,$表示从第三行到最后一行
  4. # addr1,+N    # 表示 从addr1到addr1+N行,例如2,8,表示2-10行
  5. # addr1,~N   # 表示从addr1到N的倍数的行,例如5,~4 ,表示5-8行,因为8是大于5的4的整数倍的最小一个
  6. # first~step  # 表示以first开始,后面每次加step,例如1~2,表示所有的奇数行,如下所示

替换
  1. sed -n 's/pattern/replace/' /etc/passwd                      # 替换首次匹配的pattern为replace
  2. sed -n 's/pattern/replace/g' /etc/passwd                    # 替换所有,g表示全局
  3. sed -n 's/pattern/&replace/g' file                                # 在pattern后增加
  4. sed -n 's/pattern/replace&/g' file                                # 在pattern前增加
  5. sed -n 's/pattern/\L&/g' file                                        # 将pattern转换为大写
  6. sed -n 's/pattern/\U&/g' file                                        # 将pattern转换为小写
  7. sed -n 's/[A-Z]/\l&/g' file                                             # 将文件中的大写字母转换为小写,\l,\u只支持单个字符,\L,\U支持多个
删除
  1. # 注意,d命令是在后面的,s命令在前面
  2. sed 1,5d file    # 删除1-5行
  3. sed '/pattern/d' # 删除匹配的行
  4. # 删除操作的匹配模式跟替换一样

插入
  1. # 在行后插入
  2. sed 1,4G file   # 在1-4行后面插入一行空行
  3. sed '/pattern/G'  # 在匹配行后面插入一个空行
  4. sed G file    # 在每一行后面插入一个空行
  5. sed 's/$/wq&/' file     # 在行尾插入字符wq
  6. sed '/pattern/a\new line' file    # 在匹配行后插入一行new line,匹配模式可以是正则表达式,也可以是行地址
  7. # 在行前插入
  8. sed 1,4'{x;p;x}' file    # 在1-4行前插入一个空行,注意与G的不同
  9. sed N'{x;p;x}'             # 在第N行前插入空行
  10. sed '/root/{x;p;x}' /etc/passwd   # 在匹配行前插入空行
  11. sed '{x;p;x}' /etc/passwd     # 在每一行前面插入空行
  12. sed '/pattern/i\new line' file   # 在匹配行前插入一行new line



显示行号,‘=’ 命令能显示行号,但是行号是单独的一行,若想行号后面跟该行的内容,需要再进行处理
  1. sed '=' file | sed 'N;s/\n/\t/'



2016-03-07 20:24 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: