【shell语言】【sed】之 入门

sed编辑器逐行处理文件(或输入)

(1).基本格式

sed [-nefri] [动作] [Input_File]

选项:

-n :表示安静模式操作,也就是只将被更改的行输出,没更改的行不输出,默认sed

    是输出所有的行

-e Scrip:指定sed的执行命令可以指定多个这个选项

-f Script_File:指定执行一个包含sed命令的脚本文件

-r:支持扩展的正则表达式(默认只支持基础的正则表达式)

-i:直接操作原文件,默认是不更改原文件的,而只是将更改结果直接输出到

   标准输出上,可以使用这个选项来让sed直接更改原文件

动作:

基本格式: [n1[,n2]] Function

说明:n1和n2用来指定修改的范围(从第n1行到第 n2行),他们不一定必须指定

   若都没指定则表示修改整个文件,若没有指定n2则表示修改的范围为从n1

   到文件末尾.

注:n1,n2可以为数字,表示第N行(从1开始),当然也可以用’/Pattern/’来指定

  表示使用查找来指定函数,即查找到最先包含Pattern的行为该指定的行数

Function有以下值:

(1).插入

   [1].i String:表示当前行前面插入一行,内容为String

   [2].a String:表示当前行后面插入一行,内容为String

(2).删除

   d:表示将指定的行删除

(3).替换

   [1].c String:指定整行替换为String

   [2].s/Find_String/Replace/:表示用Replace替换Find_String

(4).打印

   p:表示将选择的行打印出来

下面是一些实例:

假设文件 example.txt的内容如下

#######################example.txt内容开始

line1 hello world1
line2 hello world2
line3 hello world3

#######################example.txt内容结束

(1).在第1行后面插入一行,内容为Insert after line1
sed -i -e ‘1a Insert after line1’ example.txt
结果example.txt内容为:
line1 hello world1
Insert after line1
line2 hello world2
line3 hello world3

(2).在第一行前面插入一行,内容为Insert before line1
sed -i -e ‘1i Insert before line1’ example.txt
结果:
Insert before line1
line1 hello world1
Insert after line1
line2 hello world2
line3 hello world3

(3).删除第2到第4行
sed -i -e ‘2,4d’ example.txt
结果:
Insert before line1
line3 hello world3

(4).打印第2行
sed -e ‘2p’ example.txt

(5).将第2行替换为line2 hello world
sed -i -e ‘2c line2 hello world’ example.txt
结果:
Insert before line1
line2 hello world

(6).替换第二行的hello world为world hello
sed -i -e ‘2s/hello world/world hello/’ example.txt
结果:
Insert before line1
line2 world hello

好了sed简单入门就讲到这里了,由于sed命令实在太好用了,也太强大了,因此要

熟练使用sed还必须参考完整的sed手册页或其他高手写的教材,本文只是一个简单

的入门教材而已

符号 原子性 含义
\0 是 匹配空字符(ASCII NUL)。
\NNN 是 匹配给出八进制的字符,最大值为\377。
\n 是 匹配前面第n个捕获字串(十进制)。
\a 是 匹配警钟字符(BEL)。
\A 否 如果在字串的开头为真
\b 是 匹配退各字符(BS)。
\b 否 在字边界为真
\B 否 不在字边界时为真
\cX 是 匹配控制字符 Control-x(\cZ,\c[,等)。
\C 是 匹配一个字节(C字符),甚至在utf8中也如此(危险)
\d 是 匹配任何数字字符
\D 是 匹配任何非数字字符
\e 是 匹配逃逸字符(ASCII ESC,不是反斜杠)。
\E —— 结束大小写(\L,\U)或者掩码(\Q)转换
\f 是 匹配进页字符(FF)。
\G 否 如果在前一个m//g的匹配结尾位置时为真
\l —— 只把下一个字符变成小写
\L —— 把\E以前的字母都变成小写
\n 是 匹配换行符字符(通常是NL,但是在Mac上是CR)。
\N{NAME} 是 匹配命名字符(\N{greek:Sigma})。
\p{PROP} 是 匹配任何有命名属性的字符
\P{PROP} 是 匹配任何没有命名属性的字符
\Q —— 引起(消元)直到\E前面的字符
\r 是 匹配返回字符(通常是CR,但是在Mac上是NL)。
\s 是 匹配任何空白字符。
\S 是 匹配任何非空白字符。
\t 是 匹配水平制表符(HT)。
\u —— 只把下一个字符变成标题首字符
\U —— 大写(不是标题首字符)\E 以前的字符。
\w 是 匹配任何“字”字符(字母数字加”_” )。
\W 是 匹配任何“非字”字符。
\x{abcd} 是 匹配在十六进制中给出的字符。
\X 是 匹配Unicode里的”组合字符序列“字串。
\z 否 只有在字串结尾时为真
\Z 否 在字串结尾或者在可选的换行符之前为真。

其他示例:
首行字符小写:
sed -i ‘1s/.*/\L&/g’ tbl_user_profile_status.csv

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值