linux文本三剑客,linux文本编辑三剑客之sed

本文详细介绍了Linux中sed命令的工作机制和常用选项,包括静默模式、地址定位、编辑命令等。sed通过模式空间和保持空间处理文本,提供删除、追加、替换等操作,并能直接修改原文件。示例展示了如何处理文本行、追加内容、打印特定行、合并空白行等。sed是Linux文本处理的重要工具,适用于大量文本数据的自动化处理和格式转换。
摘要由CSDN通过智能技术生成

sed被称为linux文本处理的三剑客之一。

sed的工作机制是对文本按照模式的规定进行逐行的进行操作,但是默认情况下sed不会修改原文件(可以添加参数来修改原文件),因为sed在处理文本的时候会创建自己的模式空间,因此,在对文本处理之前会逐行的将文本内容读入到其模式空间当中,然后在模式空间中再根据匹配条件对这一行的内容做相应的操作。另外,sed同时还提供另外一个空间模式(我们暂称为保持空间),保持空间用来读取模式空间中的内容,然后在根据命令对其做相应的操作。其实保持空间就是sed为了处理模式空间中的文本而提供的一个数据中转站。

d1d25f12fc7437bd210d38447ef062a8.png

下面就是sed的常用命令:

sed: sed  [OPTION]... ‘sed脚本’ [input-file]..

常用选项:

-n:静默模式,不输出模式空间的内容到屏幕

-e:多点编辑,可实现对多个文件同时处理

-f:/path/from/script_file:从指定文件中读取编辑脚本(脚本中只需要写脚本命令,不需要写sed)

例: [root@localhost tmp]# cat ss

s/aaa/hello/g

-r:支持使用扩展正则表达式(sed默认支持基本正则表达式):

-i :直接修改原文件

地址定界:

1、不给地址,对全文中的每一行进行处理

2、单地址,

#,表示指定特定的行

/patter/ :被次模式所能匹配的每一行

3、地址范围:

#,#  指明第几行到第几行

#,+n 指明第几行及其后面几行

/patter1/,/patter/ 指明从patter1匹配到的行开始到patter2匹配到的行结束

#,/patter1/ 指明从第几行开始到第一次被模式匹配到的行之间的所有行

4、~:表示步进

例:1~2 表示显示奇数行

2~2 表示显示偶数行

常用编辑命令;

d :删除

p :显示模式空间中被模式匹配到的行

a \text :append,后面追加文本,支持\n追加行添加

i \text :insert,前面插入文本,支持\n插入多行

c \text :change,替换行伪单行或多行文本

w /path/to/filename :将匹配到的行保存到某个指定文件中

r /path/from/filename :读取指定文件的文本流至匹配到的行的行尾

= :为模式空间的行打印行号

!:取反条件,例:sed “/^UUID/!d" /etc/fstab

s///g:支持使用其他分割符, s@@@,s###,

g行内表示全局替换

p:显示替换成功的行

w /path/to/somefile :将替换成功后的结果保存至文件中

高级编辑命令:(用在模式空间和保持空间中的数据交换的命令)

h:把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g:从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x:把模式空间中的内容与保持空间中的内容进行互换

n:读取匹配到的行的下一行至模式空间

N:追加匹配到的行的下一行至模式孔家

d:删除模式空间中的行

D:删除多行模式空间中的所有行

例:

sed 's/r..t/&er/' file :  &表示替换前面模式匹配到的所有内容

例:[root@localhost ~]# sed 's/^[[:space:]]*//' /boot/grub/grub.conf

sed -n 'n;p' file :显示偶数行

sed '1!G;h;$!d' file :逆向显示文件内容

sed '$!N;$!D' file 取出文件后两行

sed '$!d' 取出文件最后一行

sed 'G' file:

sed '/^$/d;G' file 将多个空白行合并为一个空白行

sed 'n;d' file :显示奇数行

sed  -n '1!G;h;$p' file :逆向显示文件中的每一行

取路径名

sed -r 's@(/.*/)[^/]+/?@\1@'

sed -r 's@(/.*)+[^/]/?(.*)@\1@'

sed 's@[^/]\+/\?$@@'

取路径基名

sed -r 's@(/.*/)([^/]+/?)@\2@'

sed -r 's@(/.*)+([^/]/?)@\2@'

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值