Linux-sed

sed - 过滤和转换文本的流编辑器
Sed是一个流编辑器。流编辑器用于在输入流上执行基本的文本转换(从管道中输入或输入)。在某种程度上,类似于编辑器,它允许脚本编辑(例如),sed工作只通过一个传递输入(s),从而更有效率,sed已经有能力在管道中过滤文本。

用法:[sed 选项 地址+命令 文件]

选项:
-n, --quiet, --silent 抑制模式空间的自动打印
-e script, --expression=script 将脚本添加到执行的命令中
-f script-file, --file=script-file 将script文件的内容添加到执行的命令中
--follow-symlinks 在处理的时候遵循symlinks
-i[SUFFIX], --in-place[=SUFFIX]  编辑文件(如果提供后缀),请进行备份
-l N, --line-length=N  为“l”命令指定所需的行包长度,默认长度为70
--posix有GNU扩展:
-E, -r, --regexp-extended 在脚本中使用扩展正则表达式(用于可移植性使用POSIX -E)。
-s, --separate  把文件看成单独的,而不是一个单一的连续长的流。
--sandbox  operate in sandbox mode.在沙箱模式下操作。
-u, --unbuffered  从输入文件中加载最小数量的数据,并经常刷新输出缓冲区
-z, --null-data  由NUL字符分隔行
--help 展示这个帮助和退出
--version  输出版本信息和退出

命令:
地址adresses:
Sed命令可以在没有地址的情况下给出,可以对所有输入行执行命令;在一个地址中,有一个地址,在这种情况下,命令只对匹配这个地址的输入行执行;或者使用两个地址,在这种情况下,命令将执行所有的输入行,这些输入行将从第一个地址开始,并继续到第二个地址。关于地址范围的三件事:语法是addr1,addr2(即,地址由逗号分隔;addr1匹配的行将永远被接受,即使addr2选择较前一行;如果addr2是regexp,则不会对addr1匹配的行进行测试。
在地址(或地址范围)之后,在命令之前,a !可以插入,指定当地址(或地址范围)不匹配时,该命令只执行。
支持以下地址类型:数字匹配只匹配指定的行号(如果在命令行上指定-s选项,则在文件上累积累积。
first~step 先匹配每一行开始的第一行。例如,“sed -n 1 ~ 2p”将打印所有内容,输入流中的奇数行,地址2 ~ 5将以每第五行匹配,从第二行开始。
$                匹配最后一行。
/regexp/     匹配行匹配正则表达式regexp。
\cregexpc   匹配行匹配正则表达式regexp。c可能是任何字符。
0,addr2      在“匹配的第一地址”状态开始,直到找到addr2。这类似于1,addr2,除了如果addr2匹配输入0的第一行,addr2表单将在它                   的范围结束,而1,addr2表单仍将处于其范围的开始。这只适用于addr2是一个正则表达式。
addr1,+N   将匹配addr1和下面addr1的N行。
addr1,~N   将匹配addr1和跟踪addr1的行,直到下一行的输入行号是N的多倍。

正则表达式:类似于grep与awk

: label

对b和t命令的标签

#comment

注释一直延伸到下一个换行(或者是-e脚本片段的末尾)

}

{ }块的最后括号

=

打印当前线号

a \

文本附加文本,它有每个嵌入的新行,前面是反斜杠

i \

文本插入文本,它有每个嵌入的新行前面的反斜杠

q

立即退出sed脚本,而不处理任何更多的输入

Q

立即退出sed脚本,而不处理更多的输入

r filename

将文本从文件名读取

R filename

将一行从文件名中删除, 命令的每个调用都从文件中读取一行

{ }

{开始一个命令块(以}结束)

b label

分支到标签;如果被省略,分支到脚本的末尾

c \

文本将选择的行替换为文本,它有每个嵌入的新行,前面有一个反斜杠

d

删除模式空间。开始下一个循环

D

如果模式空间不包含新行,则启动一个正常的新周期 info sed

h H

复制/附加模式空间保持空间

g G

复制/ append存储空间到模式空间。

l

将当前线列在“视觉上明确”的形式

l width

在一个“视觉上明确的”形式列出当前线,在宽度字符上打破它

n N

读取/将下一行输入到模式空间中

p

打印当前的模式空间

P

打印到当前模式空间的第一个嵌入式新行

s/xx/yy/

尝试将regexp与模式空间相匹配。如果成功,替换与替换匹配的部分

t label

如果s///已经完成了一个成功的替代,因为最后的输入行被读取,从最后一个t或T命令,然后分支到标签;如果省略了标签,分支到脚本的末尾

T label

如果没有一个s///已经完成了一个成功的替代,同上。

w filename

将当前的模式空间写入文件名

W filename

将当前模式空间的第一行写入文件名

x

交换保存和模式空间的内容

y/source/dest/

在图形空间中删除出现在源上的字符

Test-use:
测试文本:1.txt

打印:p命令---默认全部打印并在匹配行下再打印一边
抑制自动打印:-n选项---仅选择匹配行打印

删除:d命令---打印缓冲区除了删除的行并不影响原文本

替换:s命令---s/xxx/XXX/g---s*xxx*XXX*/g
---g全部替换否则只替换行第一个
[0-9][0-9]$表示两位数结尾的行,&.5表末尾加小数
/\(7\)0/\1x/表示标记70的7为1存于寄存器中,再通过\1操作去引用

输入输出:结合管道及输出重定向符

e和f选项:
sed --file=xx.sed 1.txt  ----  sed --expression=‘1,2d’ 1.txt

i 选项:修改源文件

 多文本处理:多个输入文件视为一条漫长的流

Version和help选项:
sed --version   sed – help  Version显示版本,help显示选项描述

L选项:'-l N'   '--line-length=N'
指定“l”命令的默认行包长度。长度为0(0)意味着永远不要结束长线。如果没有指定,它是70。测试不对可能版本问题

返回值:
0成功
1非法操作命令等
2文件不允许操作
4.IO错误—不常见
5.Q或q,终止sed 正常退出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值