Linux中Sed命令怎么用?
admin
2023-02-03 03:00:04
0

Sed介绍:

sed是文本处理工具,读取文本内容,根据指定的条件进行处理如删除、替换、添加等
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。
Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

工作流程图

Linux中Sed命令怎么用?

Sed三大功能:

1.读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中;
2.执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行;
3.显示:发送修改后的内容到输出流,再发送数据后,模式空间将会被清空。

注意:默认情况下,所有的 sed 命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

Sed命令两种格式:

其中,“参数”是指操作的目标文件,当存在多个操作对象时用,文件之间用逗号“,”分隔;而 scriptfile 表示脚本文件,需要用“-f”选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。
sed [选项] ‘操作’ 参数
sed [选项] -f scriptfile 参数

常见的 Sed命令选项:

语法:sed [options] [script] [inputfile]
-e :允许执行多个脚本;
-f :从脚本文件中读取命令;
-h :显示帮助;
-n :取消默认输出;
-i :直接修改原始文件;
-l:  指定行长度;
-u: 最低限度的缓存输入和输出
-r:在脚本中使用正则表达式

常见的操作选项:

a:增加,在当前行下面增加一行指定内容;
c:替换,将选定行替换为指定内容;
d:删除,删除选定的行;
i :插入,在选定行上面插入一行指定内容;
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容,通常与 -n选项一起使用;
s :替换,替换指定字符;
y :字符转换;

Sed 元字符集

^: 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ : 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. : 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。

: 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[] : 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
[^] : 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
(..) : 匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替换成lovers。
& : 保存搜索字符用来替换其他字符,如s/love/&/,love这成love。
\< : 匹配单词的开始,如:/\\> : 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x{m} : 重复字符x,m次,如:/0{5}/匹配包含5个0的行。
x{m,} : 重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行。
x{m,n} : 重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行。

Sed 常用操作

选择文本

Linux中Sed命令怎么用?

sed -n 5p aa.txt

Linux中Sed命令怎么用?

sed -n '2p,5p' aa.txt  #选择第2到第5行

Linux中Sed命令怎么用?

sed -n '2p;5p' aa.txt   #选择第2和第5行

Linux中Sed命令怎么用?

sed -n '/^5/p' aa.txt  #以5开头的行

Linux中Sed命令怎么用?

sed -n '$p' aa.txt  #打印最后一行

Linux中Sed命令怎么用?

sed -n '1~2p' aa.txt   #表示从第一行开始,没个行就打印出来

Linux中Sed命令怎么用?

sed -n '/cc$/p' aa.txt   #以cc结尾的行

Linux中Sed命令怎么用?

sed -n '/fff/,10p' aa.txt   #表示从含油字符串fff到第10行打印

Linux中Sed命令怎么用?

备注:加上-n只显示出来,不会改变原文件,若要改变原文件,加上sed -i 。

替换文本

g : 获得内存缓冲区的内容,并替代当前模板块中的文本。
p : 打印模板块的行。
w : file 写并追加模板块到file末尾。

例子:

sed 's/e/E/' aa.txt

Linux中Sed命令怎么用?

sed 's/e/E/g' aa.txt   #全文中e都替换成E

Linux中Sed命令怎么用?

sed '1,5s/e/E/g' aa.txt  #第一行到第5行间e都替换成E

Linux中Sed命令怎么用?

sed '6,/^6/s/f/E/g' aa.txt #以6开头的行f都替换成E
Linux中Sed命令怎么用?

sed '/^6/s//E/g' aa.txt   #以6开头的行都替换成E

Linux中Sed命令怎么用?

备注:后面不加上g,只会替换每行第一次会出现的字符串,sed 不会改变原文件,参数之间不一定非要使用斜线分割,也可以使用除空格,换行外的任意字符若要改变原文件,加上 -i 。

删除文本

sed -e '3d' aa.txt  #删除第三行

Linux中Sed命令怎么用?

sed -e '3,5d' aa.txt #删除3到5行

Linux中Sed命令怎么用?

sed -e '$d' aa.txt  #删除最后一行

Linux中Sed命令怎么用?

sed -e '1d;5d' aa.txt  #删除1,5行

Linux中Sed命令怎么用?

sed -e '1~2d' aa.txt #删除奇数行

Linux中Sed命令怎么用?

sed -e '0~2d' aa.txt  #删除偶数行

Linux中Sed命令怎么用?

sed -e '1,/^6/d' aa.txt  #删除1到以6开头的行

Linux中Sed命令怎么用?

sed -e '5,$d' aa.txt  #删除从5行到最后

Linux中Sed命令怎么用?

sed '^$d' aa.txt  #删除空白行

备注:删除原文件内容要加上-i

追加文本

sed '3a20200229' aa.txt  #第三行后追加

Linux中Sed命令怎么用?

sed '/^8/a2020008' aa.txt  #以8开头的行后追加

Linux中Sed命令怎么用?

备注:使用echo也可以追加,但> ,>>不一样。

echo  "9988" >>aa.txt   在文本最后追加,
等于sed '$a9988' aa.txt
echo -e "999" >aa.txt  直接覆盖原文

插入文本

sed '3i2128' aa.txt  #第三行插入

Linux中Sed命令怎么用?

sed '/^9/i2128' aa.txt  #以9开头行插入

Linux中Sed命令怎么用?

sed '$i2348' aa.txt  #末行插入,实际上是倒数第二行

Linux中Sed命令怎么用?

组合命令

1.使用-e选项

sed -n -e 's/c/C/g' -e '2,3p' aa.txt

Linux中Sed命令怎么用?

2.使用分号分割

sed -e 's/d/D/g;3i6868p' aa.txt

Linux中Sed命令怎么用?

3.对一个地址使用多个子命令

sed -n '1,5 {                                    
s/c/C/g
s/e/E/g
2i5566
p
}' aa.txt

Linux中Sed命令怎么用?

相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...