sed文本处理工具

读取文本内容,根据指定的条件进行处理。是一个类似于vim的文本编辑器,但它是按行来进行编辑和处理。所以sed的主要作用就是对文本内容进行增删改查。

sed可以支持正则表达式,但不是完全依赖正则表达式,也可以支持扩展正则表达式

sed的原理:

读取----->执行----->显示

读取:读取文本内容之后会把读取到的内容存放到临时的缓冲区(模式空间)

执行:在模式空间,根据读取的文本内容,按行执行,除非指定行号,否则会遍历所有行,从上往下依次执行。

显示:执行完之后,把执行结果打印,如果需要将改变内容生效,模式空间被修改的内容会写入到指定的文件当中。只是操作,但是最终不写文件,只显示结果,展示完之后,模式空间的数据就会立即删除

sed的实际操作:

sed -e '操作' 文件1 -e '操作' 文件2

只对一个文件操作,可以不加e

常用选项:

-e:条件操作选择

-f:指定脚本文件来处理输入的文件内容。把命令卸载到脚本里,用脚本里的命令来处理第二个文件里面的内容

-i:立即生效,慎用

-n:显示script处理之后的结果,禁止sed的默认输出

操作符:

s:替换,替换指定的字符

d:删除,删除指定的行

a:增加,在当前行的下一行插入指定内容

i:增加,在指定行的上一行插入指定内容

c:替换,整行替换

y:替换,替换字符,替换前后的字符长度必须一致

r:扩展正则

p:打印

查找,打印:p

=:打印行号

np:打印第n行

$p:打印最后一行

n,mp:打印n-m行

np;mp:打印n和m行

n;p:打印偶数行

p;n:打印基数行

文本过滤:

对包含指定字符串的内容进行打印 '/big/p':所有包含big的行都会全部打印

应用基本正则表达式进行打印: /bash$/p:打印以bash为结尾的行

应用扩展正则表达式进行打印: -r -n '/(99:){2}/p' /etc/passwd

删除:d

nd;p:指定行号进行删除

1d;3d;p:删除第1行和第3行

/o/d:指定字符串删除

/big/d:删除big所在的行

/one/,/six/d:删除one到six所在的行

/^$/d:删除空行

替换:

s:字符串替换

c:整行替换

y:单字符替换,前面长度要保持一致

例:

sed -n 's/root/test/gp' /etc/passwd:把所有的root都替换成test

把第一个以root开头的注释掉也就是在前面加个#号

sed -r -n 's/^root/#root/p' /etc/passwd

sed -r -n '/^root/ s/^/#/p' /etc/passwd

sed 's/[a-z]/\ u&/g' 文件名:小写改大写,全部修改加上g

sed 's/[A-Z]/\ l&/g' 文件名:大写改小写,全部修改加上g

l&:转换成小写的特殊符号,在使用时,需要转义符\

u&:转换成大写的特殊符号,在使用时,需要转义符\

整行替换:c

sed '/exy/c boge is exy' ky30.txt

单字符替换:y

sed 'y/a/1/' ky30

增加:

a在下一行添加

sed '/one/a two' ky30.txt

i在上一行添加

sed '/one/i two' ky30.txt

r在行后读入指定文件的内容

sed '/one/r ky31.txt' ky30.txt

面试题:

一、sed文本内容处理工具文件过大怎么办

1.split -l

2.split -b

3.cat 文件名 | sed处理 -----中型文件,大型文件,还是先分割的好

二、怎么样不进入文件就可以删除文件当中的内容,免交互删除

1.sed -i 'd' 文件名

2.cat /dev/null > 文件名

三、sed命令当中字符串的位置进行交换

echo ky30ergedage | sed -r 's/(ky30)(erge)(dage)/\3\2\1/'

四、提取版本号

sed -r 's/(.*)-(.*)(\.jar)/\2/' number.txt

grep -E "[0-9]+." ms.txt

五、查看tail -f messages 去匹配的范围内进行打印

sed -n 'Jul 20 11:30:01/,/Jul 20 12:00:01'

六、把网卡的指定ip地址换掉

sed '/准备更换的内容/c /替换的内容/' /etc/sysconfig/network-scripts/ifcfg-ens33

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值