06、linux常用命令3——sed

1. sed 对文本的行进行操作

sed是一种流编辑器,它是文本处理中非常好的工具

处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出或添加选项 -i

参数

文件:指定待处理的文本文件列表。

格式:sed [选项] '[定址符]处理动作' 文件 [input-file]

选项

-i: 直接修改文件内容,而不是输出到终端

-n: 不改变文件内容,只将选址符内的文本打印在终端(经常与处理动作p连用)

-e :多点编辑, 允许在同一行里执行多条命令

sed -e '1,5d' -e 's/test/check/' file

如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果

-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;

定址符:指的是要操作的内容范围,如指定处理的起、止行数

省略定址符时,默认逐行处理全部文本

举例来说,如果我的动作是需要在 10 到 20 行之间进行,则写作'10,20动作行为---选定行的范围:,(逗号)

定址符前后范围也可以为正则表达式:

sed -n '/test/,/check/p' file

表示file中出现的第一个test到第一个出现的check的文本(包括边界),打印出来,不改变原文件内容

处理动作:

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)

i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)

d :删除, 因为是删除,所以 d 后面通常不接任何内容

s :替换, 通常这个s的动作可以搭配正规表示法!例如 1,20s/old/new/g

c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行

p :打印, 亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

常用实例:

替换操作:s命令

替换文本中的字符串:

sed 's/book/books/' file 将file文件内所有内容的book改成books

-n选项和p命令一起使用表示只打印那些发生替换的行:

sed -n 's/test/TEST/p' file

全面替换标记g

使用后缀 /g 标记会替换每一行中的所有匹配:

sed 's/book/books/g' file

将每行的第1 个old替换为new: s/old/new/

将每行的第3 个old替换为new: s/old/new/3

将所有的old都替换为new:s/old/new/g

按照范围替换

删除操作:d命令

删除文件的第2行:

sed '2d' file

删除文件的第2行到末尾所有行:(开头用^)

sed '2,$d' file

删除空白行:

sed '/^$/d' file

组合多个表达式

sed '表达式' | sed '表达式' 等价于: sed '表达式; 表达式'

面试题: 取出文件aaa.txt的第4到7行 sed -n '4,7p' aaa.txt

输出最后一行: sed -n '$p' a.txt

从第5行输出到最后一行 : sed -n '5,$p' a.txt

输出第4行及其后的10行内容,共11行 : sed -n '4,+10p' a.txt

显示file.txt的1,3,5,7,10,15行? sed -n "1p;3p;5p;7p;10p;15p" file.txt 分号并列

修改test.txt的23行study更换为stuyd sed –i '23s/study/stuyd/g' test.txt /g表示替换全部,不加就只替换每一行第一个,如果一行中有多个符合条件的就只能替换到第一个

修改test.txt的第100行之后的study为stuyd sed –i '100,$s/study/stuyd/g' test.txt

扩展:

将文件的start 和 end 行之间的全部数字换成0

sed '/start/,/end/s/^[0-9]*$/0/g' log.txt

所有在模板test和check所确定的范围内的行都被打印:

sed -n '/test/,/check/p' file

打印从第5行开始到第一个包含以test开始的行之间的所有行:

sed -n '5,/^test/p' file

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值