Linux 【sed 命令】流编辑器

sed 命令是流编辑器的缩写,对输入执行基本的文本转换。

sed 命令的一大好处是您可以在文件中的任何位置添加文本 。

sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过

语法:

sed -i '$ a\ 添加的文本' 文件名称
# "-i" :告诉系统它将使用相关文件来插入文本
# "$"  :该行将添加到文件末尾
# 文本前面添加 "a" 告诉系统我们希望将该行附加到文件的现有内容中。

选项:

-e<script>或--expression=<script> :它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项

-f<script文件>或--file=<script文件>:后跟保存了sed指令的文件, 以选项中指定的script文件来处理输入的文本文件。

-h或--help :显示帮助。

-n或--quiet或--silent: 取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行

-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改

-r:支持扩展正则

动作说明

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

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

d :删除,因为是删除啊,所以 d 后面通常不接任何东西;

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

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

s :取代,可以直接进行取代的工作!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g

示例:

-p:打印文本

#打印第3行
sed -n '3p' /etc/passwd
#打印第5-10行
sed -n '5,10p' /etc/passwd
#显示第1行和第5行
sed -n '1p;5p' /etc/passwd

#打印:取反,取1到4行
cat -n /etc/passwd|sed -n '5,100!p' 

#显示第2行和其后面两行:即显示2-4行
sed -n '2,+2p' /etc/passwd

#从第一行起,每间隔3行输出一行:1-4-7-10-13...
sed -n '1~3p' /etc/passwd

-s:取代

#在每行前面加上 *
sed -n 's/^/*/p' a
#在每行末尾加上 ?
sed -n 's/$/?/p' a
#在2-6行前面加上 #
sed -n '2,6s/^/#/p' a

-c:更改整行操作可以根据行号和模式匹配进行操作

语法:
sed '/字符串/c 更换后的字符串' 文件名称

#把第三行改成:"这是c参数"
sed '3c "这是c参数" ' a
#将 a 所在的行,整行替换成后面的字符串(更换了a字符)
sed '/a/c 更换了a字符' a

-a:追加操作可以根据行号和模式匹配进行操作

#在第1行下,新起一行追加后面的字符串
sed '1a 追加的字符串' a
#在第1-3行下,新起一行追加后面的字符串
sed '1,3a 追加的字符串' a
#取代第四行

#在包含 q 的行下面,追加字符串
sed '/q/a 追加的字符串' /etc/fstab

-i:插入操作可以根据行号和模式匹配进行操作

#在文件末尾添加一行
sed -i '$ a 你好!' a
#在第四行后,新起一行追加字符串
sed -i '4 a 这是插入的文本' a
#在第四行后,新起一行追加字符串
sed -e 4a\newLine a

#将a.txt的第88行插入文件b.txt
sed -i '88 r b.txt' a.txt
awk '1;NR==88{system("cat b.txt")}' a.txt > a.txt

-d:删除操作可以根据行号和模式匹配进行操作

#删除1-5行
sed '1,5d' a
#取反,删除除了删除1-5行之外的行
sed '1,5!d' a
#删除包含有'name'字符串的行
sed '/namae/d' a

#删除空行和注释:'^$'空行;'^#'注释
sed -r '/^$|^#/d' a
sed -e '/^$/d'  -e '/^#/d' a
sed -r '/^$/d;/^#/d' a

-s:替换

#替换全文每一行的每一个 A 为 B
sed 's/A/B/g' a.txt

#在a文件中,1-5行:把所有 A 替换为 B
sed '1,5s/A/B/g' a.txt

#.* :替换整行
sed '1,5s/.*/B/g' a.txt

#【. :替换一个字符 】把1-5行每个字符替换为 B
sed '1,5s/./B/g' a.txt

#每一行的第一个 w 替换为 W
sed 's/w/W/' a.txt

-y罗列置换每个对应的字符

不同于上面的s命令,以字符串模式为单位替换为一个整体。

sed 'y/查找的各个字符/对应替换后的各个字符/' 文件名

sed ‘y/abc/123’ test.txt ,这个命令会依次替换a,b,c为1,2,3

查找的各个字符与对应替换后的各个字符的长度要一致

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值