linux常用命令全集sed,Linux常用命令——sed

sed 字符流编辑器

sed 是Stream Editor(字符流编辑器)的缩写,简称刘编辑器。

sed 是操作、过滤和转换文本内容的强大的工具。常用功能包括对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤制定字符串)取行(取出指定行)

语法格式:sed【选项】【sed内置命令字符】【输入文件】

注意:

1.sed 以及后面的选项、命令和输出文件,每个元素之间都要至少要有一个空格

2.在sed中引入shell变量,如:ip=hostname -I;echo "hello world">>one|sed "s#hello#$ip#" one

参数选项:

参数

说明

-i

直接修改文件内容

-n

静默模式,仅打印和sed命令匹配的内容

-r

支持扩展表达式(预设是基础正规表示法语法)

-e

直接在命令行模式上进行sed动作编辑,此为默认选项。也表示多点编辑

-f

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

-V

-V或--version 显示版本信息

动作参数说明:

参数

简述

详情

a\

新增

在当前行下面插入文本

c\

取代

把选定的行改为新的文本

i\

插入

在当前行上面插入文本

b

跳过

跳过匹配的条件

d

删除

删除选择的行

p

打印

打印模板块的行,通常 p 会与参数 sed -n 一起运行

s

取代

替换指定字符,例如 1,20 s/old/new/g

g

替换

表示行内全面替换

y

更新

表示把一个字符翻译为另外的字符(但是不用于正则表达式)

r

文件

从目标文件中读取

y

翻译

把一个字符翻译为另外的字符,前后翻译字符数要保持一致

lable

标记

自定义标记内容的执行与否

sed 元字符集

字符集

说明

案例

\^

锚定行的开始

如:'^grep' 匹配所有以 grep 开头的行

$

锚定行的结束

如:'grep$' 匹配所有以 grep 结尾的行

.

匹配一个非换行符的字符

如:'gr.p' 匹配 gr 后接一个任意字符,然后是 p

*

匹配零个或多个先前字符

如:' *grep' 匹配所有一个或多个空格后紧跟 grep 的行。 .* 一起用代表任意字符

[ ]

匹配一个指定范围内的字符

如:'[Gg]rep' 匹配 Grep 和 grep

[^ ]

匹配一个不在指定范围内的字符

如:'[^A-FH-Z]rep' 匹配不包含 A-F 和 H-Z 的一个字母开头,紧跟 rep 的行

\(..\)

标记匹配字符

如:'(love)',love 被标记为1

&

保存搜索字符用来替换其他字符

如s/love/**&**/,love这成**love**

\<

锚定单词的开始

如:'\

\>

锚定单词的结束

如:'grep\>' 匹配包含以grep结尾的单词的行

x{m}

连续重复字符 x,m 次

如:'o{5}' 匹配包含连续5个o的行

x{m,}

连续重复字符 x,至少 m 次

如:'o{5,}' 匹配至少连续有5个 o 的行

x{m,n}

连续重复字符 x,至少 m 次,不多于 n 次

如:'o{5,10}' 匹配连续 5-10 个 o 的行

[:digit:]

所有数字, 相当于0-9

如:[0-9]---> [[:digit:]]

[:lower:]

所有的小写字母

如:[a-z]---> [[:lower:]]

[:upper:]

所有的大写字母

如:[A-Z]---> [[:upper:]]

[:alpha:]

所有的字母

如:[A-Za-z]---> [[:alpha:]]

[:alnum:]

非特殊符号,相当于0-9a-zA-Z

如:[0-9a-zA-Z]---> [[:alnum:]]

[:space:]

空白字符

如:[ ]---> [[:space:]]

[:punct:]

所有标点符号

如:[^0-9a-zA-Z]---> [[:punct:]]

注意:扩展正则表达式必须结合 -r 选项

常用:命令 sed 替换用法举例

源文件

3e8e9a09d49dcefef75c89d504c4535e.png

示例:

序号

指令

说明

sed -i '/news/c HAPPY' bak.txt

匹配 news 字符的行,替换成 HAPPY 的行

sed -i 's#static#stop#' bak.txt

把 static 字符替换成 stop 字符

sed -i '/server/s#68\.1#76\.3#' bak.txt

匹配 server 的字符行,把 68.1 替换成 76.3 由于点号有特殊意义所有需要转义

sed -i 's#lp#LP#2g' bak.txt

把所有匹配到 的行中第二次及以后出现的 lp 字符替换成 LP 字符

sed -i 's#root#tom#2p' bak.txt

把所有匹配到字符 bin 的行中第二次出现的 root 替换成 tom 字符,并再生产与匹配行同样的行

sed -i 's#games#GAMES#2' bak.txt

把所有匹配到字符 usr 的行,第三次出现的 usr 替换成 USR 字符

sed -i '/sys/{s#/dev#/log#;s#3#6#g}' bak.txt

匹配字符 sys 的行,把字符 dev 替换成 log 字符,且把 3 替换成 6

sed -i 's#nologin#(&)#g' bak.txt

把 nologin 用括号括起来,& 表示引用前面匹配的字符

sed -i 's/sys:x/#&/g' bak.txt

匹配字符 sys:x 的行前面添加 # 号

sed -i '/tcp/s#;# #g' bak.txt

匹配字符 tcp 的行,把分号替换成空,也可用于去注释 # 号

改变后的

522b4b9b5c9c50ae8eb47239814d9462.png

常用:命令 sed 简单变量举例

引用变量

91628974a21c8e04428573cec434f690.png

5057dcba7e9c0656eabc9c17e03ed8c1.png

注意:当sed命令也有默认变量时,在去引用自己定义的变量会出现语法错误

注意:当sed命令里面没有默认的变量时可以把单引号改成双引号当sed命令里面有默认的变量时,那自己定义的变量需要加单引号,且sed里面的语句必须用单引

进阶:命令 sed 的高级使用

案例一

正在操作的内容行写入到文件中

cac5f085851887f2ccc16616950d3791.png

577923d6938d43dd6905bd242868a492.png

指定行号添加内容

2b3236117b052df7d9b40ae1340a50a5.png

案例二

获取域名信息

源文件与结果样式

cat yuming.txt|sed 's#http:\/\/##;s#\/.*##'|sort|uniq -c|sort -rn

awk -F/ '{print $3}' yuming.txt|sort -r|uniq -c|awk '{print $1"\t",$2}'

98ad58ebfeb40f1caa505b82007fc138.png

9a8e5dab2d54040b86856efe98ccd845.png

命令参数用法举例

案例一

参数 -n 举例

d97be333be6f1e8de37c59fc1ad965ae.png

注意:在不加 -n 时,检索到的行重复打印两遍,原因是 sed 默认会打印文件中的所有行

faa4c0397942e13ca3fa158e96a432ef.png

0814a917b84569747cfbc466bc11d03d.png

注意:当使用多个 sed 编辑命令时,需用 {} 并用分号进行分隔

案例二

动作参数 s 举例

在匹配的行尾添加 book 字符

3b207202dc7af4e6a1170bc609bcf954.png

abb5e7cf3967e9dd2c28097c1658b73a.png

在 is 字符前添加 ysg

4e1004a4f38487c8ffbec5fe4291f807.png

db203d945f98d3302243a9cdbb4cf835.png

动作参数 i 举例

662ef954f944737006fc357018b3fd1c.png

动作参数 a 举例

af6132cf06b4890bfd379e4714de6e71.png

61f85e268a5f5714e28fbf03e60a9b1d.png

动作参数 d 举例

fd45ebbb24ad9346542890ea445a461f.png

删除 3 至最后一行

4e6c114d67841c2c72f0b63f08e6a79f.png

动作参数 b 举例,跳过某些符合的条件

9c51b8ecc95c59b9bf740f0a1ede3b3c.png

动作参数 c 举例

整行取代 2-4 行的数据

61da3370d36e705af2eed8600082ffbd.png

动作参数 lable 、y 举例

dde75b853b55a3cc2cae20769ce62d7d.png

注意:在不适用 -i 参数时,原文本不会被修改,当使用 -i 参数时表示写入并修改文本,参数 -e 表示直接在命令行模式上进行sed动作编辑,此为默认选项

案例三

sed 的正则表达式举例

举例

说明

sed '5 q' /etc/passwd

打印前 5 行

sed -n '1,3p' /etc/passwd

打印 1-3 行

I sed -n '5,/^man/p' /etc/passwd I 打印从第5行开始到第一个包含以 man 开始的行之间的所有行(如果 man 不存在则打印到结尾) I

| sed -n '/r*t/p' /etc/passwd | 打印匹配r有 0 个或者多个,后接一个 t 字符的行 |

| sed -n '/.r.*/p' /etc/passwd | 打印匹配有r的行并且r后面跟任意字符 |

| sed -n '/o*/p' /etc/passwd | 打印o字符重复任意次 |

| sed -n '/o\{1,\}/p ' /etc/passwd | 打印o字重复出现一次以上 |

| sed -n '/o\{1,3\}/p ' /etc/passwd | 打印o字重复出现一次到三次之间以上 |

| sed -n '/^#/!p' /etc/vsftpd/vsftpd.conf | 打印以 # 开头的行,进行取反,已达到过滤注释的效果 |

| sed -n '/^#/!{/^$/!p}' /etc/vsftpd/vsftpd.conf | 匹配以 # 开头的行,进行取反,然后在其结果中对空格开头的行进行取反,表示过滤空格与注释 |

| sed -e '/^#/d' -e '/^$/d' /etc/vsftpd/vsftpd.conf | 删除匹配的空格行与 # 号开头的行,sed支持对单个文件进行多条件操作 |

案例一

a7eddf2c6b6fff754bad5c206656e931.png

9d21ab0b6dc98269438ad62bef6275e3.png

案例二

参数 \w\+ 匹配每一个字符 ,使用 [&] 替换它,& 对应于之前所匹配到的单词

db26bce1be987a787b5bca89d71c2049.png

案例三

子串匹配标记 \1 举例

a0b37eba5d9458706dc9adbe53353f15.png

注意:\1 代表被匹配到的第一个模式,\2 代表第二个模式,以此类推。sed中可以并只记录 9 个模式。

案例四

选定行的范围:,(逗号)举例

7f7281069f619ee92f4fce74e7f66f4d.png

案例五

打印奇数行或偶数行

168f6f5598012babee6b1b74101003e8.png

打印匹配字符串的下一行

152a63aa69c1f743e808f9aff59b5f6e.png

注意:sed '表达式' | sed '表达式',等价于,sed '表达式; 表达式'

扩展使用

案例一

保持和获取:h 命令和 G 命令

在 sed 处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理

fed2469046666a2e35b03fa3ed0378a6.png

匹配 test 的行被找到后,将存入模式空间,h 命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G 命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行

简单来说,包含 test 的最后一行会被复制并追加到该文件的尾部

注意:H 命令为把包含 test 的所有行复制并追加到该文件的尾部

注意:我看了网上关于 h 命令和 x 命令的介绍:互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换,但亲测结果并不是这样的,也看了 man ,这就不多说什么了,也许是方法有误吧,有兴趣研究的,有了结果后,也希望评论交流下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值