sed笔记本

sed(stream editor)流编辑器,以行为单位处理文本(处理: 增加 删除 修改 查询)
sed [options] "pattern cmd" file

  • 一次从输入中读取一行
  • 根据所提供的命令匹配数据
  • 按照命令修改流中的数据
  • 将新的数据输出到STDOUT

在这里插入图片描述
cmd

在这里插入图片描述
在这里插入图片描述
命令 = 显示行号


替换

sed 's/dog/cat/' data.txt # 文件中的dog替换为cat,只替换第一个

-e 执行多个命令

sed -e 's/brown/green/; s/dog/cat/' data.txt

-f 从文件读取编辑器命令

sed -f script.sed data.txt

#script.sed文件
s/brown/green/
s/fox/elephant/
s/dog/cat/

标记替换

sed ‘s/test/trial/2’ data.txt #替换第二个
sed ‘s/test/trial/g’ data.txt #替换所有
sed ‘s/test/trial/p’ data.txt #打印替换后的行的内容
sed ‘s/test/trial/w test.txt’ data.txt #将替换的行的内容保存到指定文件
sed ‘s!/bin/bash!/bin/csh!’ /etc/passwd # 使用!做替换分割

反向引用

在这里插入图片描述

sed 's/had..p/&s/g' data.txt # &表示前边匹配到的 引用
& 或者 \1 都表示反向引用
sed 's/\(had..p\)/\1s/g' data.txt # \1 表示前边匹配到的 引用 括号中内容
sed 's/\(had\)...../\1oop/g' data.txt # \1 表示前边匹配到的 引用 括号中内容

匹配模式中存在变量建议使用""

#!/bin/bash
old=aa
new=bb
sed -i "s/$old/$new/" data.txt
#或者
sed -i 's/'$old'/'$new'/' data.txt

使用地址范围

sed ‘2s/dog/cat/’ data.txt
sed ‘2,3s/dog/cat/’ data.txt
sed ‘2,$s/dog/cat/’ data.txt

sed '2,${
s/brown/green/
s/lazy/active/
}' data.txt

使用文本过滤

sed ‘/ming/s/bash/csh/’ /etc/passwd #替换含ming的行


删除行

sed ‘3d’ data.txt #删除3行
sed ‘2,3d’ data.txt #删除2-3行
sed ‘/pattern/d’ data.txt #删除含pattern行

添加行

#append / insert
i, 指定行之前插入新行
a, 指定行之后附加新行,这两个命令必须单独指定要插入或附加的行

echo "new line" | sed 'i\line1'
echo "new line" | sed 'a\line1'
sed '/pattern/a This is append context' data.txt

修改

sed ‘3c\this is changed new line’ data.txt #修改第三行
sed ‘/number 3/c\this is changed new line’ data.txt #匹配number 3
sed ‘2,3c\this is changed new line’ data.txt #用这一行替代原来的2 3 两行内容,而不是逐一修改

转换

sed ‘y/123/789/’ data.txt
echo “this 1 is a test of 1 try” | sed ‘y/123/456/’

this 4 is a test of 4 try #输出

写入文件

w filename
sed ‘1,2w test.txt’ data.txt # 将data的前2行写入test.txt

sed ‘3r new.txt’ data.txt #从第三行开始插入new.txt内容

回顾打印

echo “hello” | sed ‘p’
sed -n ‘2,10p’ data.txt

-n选项:只显示匹配处理的行(否则会输出所有)(也就是关闭默认的输出)
通常 p 会与参数 sed -n 一起运行

支持扩展正则

sed 文本工具支持:BREs( 基本的正则)、EREs(扩展正则)

sed 指令默认是使用"BREs"

sed 命令参数 “-r ” ,则表示要使用“EREs"
awk 指令默认是使用 “EREs"
linux shell 正则表达式(BREs,EREs,PREs)差异比较

-r 支持扩展正则
sed -n -r '/python|PYTHON/p' data.txt # 或| 就是扩展正则

-i 直接修改文件内容

sed -n 's/love/like/g;p' data.txt #替换 ;print


高级用法

处理多行的命令

  • N 将数据流中的下一行加进来 创建一个多行组
  • D 删除多行组中的一行
  • P 打印多行组中的一行

next

sed '/pattern/{n;d}' data.txt #找到有pattern的一行,然后n 让sed移动到下一行 然后删除
sed '/pattern/{N; s/\n/ /}' data.txt # 找到pattern的一行, 然后把该行的换行符替换成空格;

sed 'N; s/System.Addmin/desk user/' data.txt #可以匹配pattern在两行的情况,中间的. 是通配符

sed 'N; /System\nAdmin/d' data.txt #会删除匹配到的两行
sed 'N; /System\nAdmin/D' data.txt #删除第一行
sed 'N; /System\nAdmin/P' data.txt #打印匹配的第一行

保持空间

//挖坑

排除命令

sed -n '/pattern/p' data.txt #不打印有pattern的行
sed '$!N s/System Admin/desk user/' data.txt #$表示最后一行,最后一行不会做多行处理,N对遇最后一行不起作用;

分支

[address]b [label] #label决定要跳转位置,没有则到结尾;
sed '{2,3b; s/This is/Is this/; s/line./test?/}' data.txt #两个替换命令都不对2-3行起作用

测试

t # 类似if then
如果替换命令成功,测试命令就会跳到指定标签;否则不会跳转;

添加行号

sed '=' data.txt | sed 'N; s/\n/ /' #添加行号

examples

利用sed查找文件内容b站
P7-P8
在这里插入图片描述
get_all_segments 是一个函数名,返回的是一个列表, 用`get_all_segments` 引用
在这里插入图片描述


例子2:

^[^#] 解释: ^开头 [^#] 非#号
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#3.(3) 少了ftp

reference

shell(8) sed-gawk.doc

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值