Linux sed 命令用法大全

透彻分析sed命令

基本作用

sed命令可以通过一个(或多个)表达式或者脚本来编辑和处理(多个)文件,简化对文件的反复操作、编写转换程序等。

命令基础格式

sed [-hnV][-e<script>][-f<script文件>][文本文件]

基本参数

sed --v  #查看版本 =--version

sed --h  #查看帮助 = --help

sed -n #静默执行 = --quiet --silent

sed -e #执行表达式script, --expression=script  不改变源文件内容

sed -f #执行脚本script-file = --file = script-file

sed -i #直接修改源文件

sed -l 指定“l”命令的换行长度

sed -r 使用扩展正则表达式

操作参数

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

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

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

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

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

s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

扩展正则表达式

^          匹配行开始,如:/^sed/匹配所有以sed开头的行。

$          匹配行结束,如:/sed$/匹配所有以sed结尾的行。

^$        空白行

.          匹配任意单个非换行符字符

*          匹配相邻的字符任意次(0或多个)

.*        匹配任意长度的任意字符

\?        匹配紧挨在前面的字符0次或1次

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的行

<          匹配单词的开始,如:/<love/匹配包含以love开头的单词的行

>        匹配单词的结束,如/love>/匹配包含以love结尾的单词的行

<pattern>  匹配单词

[]        匹配指定范围内的任意单个字符,如/[sS]ed/匹配sed和Sed

[^]        匹配不在指定范围内的任意单个字符

()   匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替换成lovers。

[:digit:]  所有数字, 相当于0-9, [0-9]= [[:digit:]]

[:lower:]  所有的小写字母

[:upper:]  所有的大写字母

[:alpha:]  所有的字母

[:alnum:]  相当于0-9a-zA-Z

[:space:]  空白字符

[:punct:]  所有标点符号

s替换标记[flags]

g替换全部

number只替换number行

p如果替换则打印

w将替换的结果写入文件

\l子串匹配

命令举例

 以 1.txt文件为例,文件中原始内容如下:

jianglei@ubuntu:~$ cat 1.txt

this is the 1 line.

this is the 2 line.

this is the 3 line.

this is the 4 line.

this is the 5 line.

this is the 6 line.

this is the 7 line.

this is the 8 line.

this is the 9 line.

this is the 10 line.

#在第四行后插入一行 ,打印输出,不改变源文件      -e不改变源文件, -i直接修改源文件,操作系统文件时慎重

sed -e '4a\this is a insert line' 1.txt

#在第四行后插入一行 ,打印输出,改变源文件

sed -i '4a\this is a insert line' 1.txt

#在第四行后插入一行 ,打印输出,不改变源文件,重定向到文件

sed -e '4a\this is a insert line' 1.txt >new_1.txt

#每行后面都增加一个空白行

sed -e 'a\\n' 1.txt

#以this开头的行换行增加一个注释。

sed '/^this/a\\--->this is a example' 1.txt

#删除第五行

sed -e '5d' 1.txt

#删除前五行

sed -e '1,5d' 1.txt

#删除5行以后的数据

sed -e '5,$d' 1.txt

#删除2-5行,nl =cat -n

nl ./1.txt | sed '2,5d'

#每行前面插入一个test

nl 1.txt | sed -e 'i test'

#第二行前面插入一个test

nl 1.txt | sed -e '2i test'

#第二行前面插入多行数据 注意首行与最后一行包含引号,行与行之间包含\

nl 1.txt | sed -e '2i test\

> sfdsf\

> dsfdfd\

> dfdfd'

#只显示567行

sed -n '5,7p' 1.txt

nl 1.txt |sed -n '5,7p'

# 显示包含数字9的行

nl 1.txt | sed -n '/9/p'

#显示包含有数字0-7的行

nl 1.txt | sed -n '/[0-7]/p'

#删除所有包含数字的行

nl 1.txt | sed -n '/[0-9]/d'

#找到包含this的行,并把this改为that

sed -e '/this/{s/this/that/g}' 1.txt

#提取IP地址:

/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'

#多点编辑:一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell

nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'

#将1.txt中的2-5行删除,将this替换为that,并在处理后将第二行替换为this is a newline

nl 1.txt | sed '2,5d'| sed 's/this/that/g'|sed '2c this is a newline'

#将IP追加重定向到文件

/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' >> ./sed.txt

#打印前5行

sed -n '1,5p' sed.txt

sed '5q' sed.txt  #必须从0开始

字符串替换:

sed '/today/,/hello/s/$/www/' sed.txt      对于模板today和hello之间的行,每行的末尾用字符串www替换

sed '/today/,/hello/s/^/www/' sed.txt      对于模板today和hello之间的行,每行的开头用字符串www替换

sed '/^[A-Za-z]/s/5/five/g' sed.txt      将以字母开头的行中的数字5替换成five

sed 's/hello/hi/g' sed.txt       在整行范围内把hello替换为hi。如果没有g标记,则只有每行第一个匹配的hello被替换成hi。

sed 's/hello/hi/2' sed.txt       只替换每行的第2个hello为hi

sed 's/hello/hi/2g' sed.txt      只替换每行的第2个以后的hello为hi(包括第2个)

sed -n 's/^hello/hi/p' sed.txt     -n和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的hello被替换成hi,就打印它

sed -n '2,4p' sed.txt      打印输出sed.txt中的第2行和第4行

sed -n 's/hello/&-hi/gp' sed.txt      &符号表示追加一个串到找到的串后

sed 's/^192.168.0.1/&-localhost/' sed.txt    所有以192.168.0.1开头的行都会被替换成它自已加 -localhost,变成192.168.0.1-localhost

sed 's/^192.168.0.1/[&]/' sed.txt     表示给IP地址添加中括号

sed 's#hello#hi#g' sed.txt      把所有hello替换成hi不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,"#"在这里是分隔符,代替了默认的"/"分隔符

sed -n '/today/,/hello/p' sed.txt      所有在第一个today和第一个hello所确定的范围内的行都被打印

sed -n '5,/^hello/p' sed.txt      打印从第五行开始到第一个包含以hello开始的行之间的所有行

sed -n '/^hello/,8p' sed.txt      打印从第一个包含以hello开始的行到第8行之间的所有行

sed "s/$//;s/ *//g;/^$/d"

sed -e  s/$//  sed.txt     $是最后。在每一行后面追加空。 s为搜索,如s/a/b/,搜索a将替换为b,并只替换一次。

s/ *//g   将空格删除。 g代表搜索到的全部替换。"空格*"即" *"代表多个空格。

/^$/d     删除空行。

#在每一行最后追加一个字符串,也可换行

sed -e  s/$/last/  sed.txt

#在每一行最后追加一个换行

sed -e  s/$/\\n/  sed.txt

#删除所有空格

sed -e  s/\\s//g  sed.txt

#删除所有空行

sed -e  /^$/d  sed.txt

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容

  • sed是一种流编辑器,它是文本处理中非常好的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的...
    Summer_1981阅读 682评论 0 1
  • 行前或行后插入 sed 'p;s/^.*$/--------/' file awk '{print $0;prin...
    不排版阅读 518评论 0 0
  • grep擅长查找,awk擅长分析(select),sed擅长批量编辑行 概述 SED的英文全称是 Stream E...
    piziyang12138阅读 935评论 0 3
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 1,095评论 0 0
  • 今天是2017年6月15号,还有几天即将毕业满一年。 早上上班走到一半的时候,下起了大雨,猝不及防,淋成了狗子。不...
    慧xie阅读 135评论 0 0