linux || sed(2)

调用sed有三种方式

  • 在命令行键入命令;
  • 将sed命令插入脚本文件,然后调用sed;
  • 将sed命令插入脚本文件,并使sed脚本可执行。

1.使用sed命令行格式为:
sed [options] sed命令 输入文件

记住在命令行使用sed命令时,实际命令要加单引号。sed也允许加双引号。

2.使用sed脚本文件,格式为:
sed [options] -f sed脚本文件 输入文件

3.要使用第一行具有sed命令解释器的sed脚本文件,其格式为:
sed脚本文件 [options] 输入文件

不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件, sed从标准输入中
接受输入,一般是键盘或重定向结果。

sed options如下:
  • n 不打印;sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以用来打印编辑行。
  • e∶进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑
  • c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条sed命令,此选项无用,但指定它也没有关系。
  • f 如果正在调用sed脚本文件,使用此选项。
  • i∶直接修改读取的文件内容,而不是由屏幕输出
1.使用sed在文件中查询文本的方式

sed浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
1)使用行号,可以是一个简单数字,或是一个行号范围。
2 ) 使用正则表达式

使用sed定位文本的一些方式
命令 描述
x x为一行号,如1
x , y 表示行号范围从x到y,如2,5表示从第2行到第5行
/pattern/ 查询包含模式的行。例如/disk/或/[a-z]/
/pattern/pattern/ 查询包含两个模式的行。例如/disk/disks/
/pattern/,x 在给定行号上查询包含模式的行。如/ ibbon/ , 3
x , /pattern/ 通过行号和模式查询匹配行。3,/vdu/
x , y ! 查询不包含指定行号x和y的行。1 , 2 !
2.基本sed编辑命令

sed编辑命令

命令 描述
p 打印匹配行
= 显示文件行号
a \ 在定位行号后附加新文本信息
i \ 在定位行号后插入新文本信息
d 删除定位行
c \ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制ASCII代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句
3.sed和正则表达式

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开头的单词的行。
> 匹配单词的结束,如/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的行。
4.基本sed使用举例(都是要test.txt文件)

1)使用p(rint)显示行
ptint命令格式为[ address [,address ] P。显示文本行必须提供sed命令行号

pengzw@super-server:~$ cat test.txt 
Hello,world!
Write a word!
I love dog!
Good good study, day day up!
I have $1.
pengzw@super-server:~$ sed -n '2p' test.txt
Write a word!

2)打印范围:可以指定行的范围,现打印1到3行,用逗号分隔行号。

pengzw@super-server:~$ sed -n '1,2p' test.txt
Hello,world!
Write a word!

3)打印模式:匹配单词day,并打印此行,使用模式/pattren/

pengzw@super-server:~$ sed -n '/day/'p test.txt
Good good study, day day up!

4)使用模式和行号进行查询:4 , /the/,但是有一个问题,如果行号指定不对,会出现指定行和匹配day的行。

pengzw@super-server:~$ sed -n '4,/day/'p test.txt
Good good study, day day up!
pengzw@super-server:~$ sed -n '3,/day/'p test.txt
I love dog!
Good good study, day day up!

5)匹配元字符
匹配元字符$前,必须使用反斜线\屏蔽其特殊含义。模式为/$/ p。

pengzw@super-server:~$ sed -n '/\$/'p test.txt
I have $1.

6)显示整个文件:1,$p,$意为最后一行。

pengzw@super-server:~$ sed -n '1,$p' test.txt
Hello,world!
Write a word!
I love dog!
Good good study, day day up!
I have $1.

7)任意字符:

pengzw@super-server:~$ sed -n '/.*u/'p test.txt
Good good study, day day up!

8)首行:比较两种写法,一般都是第二种

pengzw@super-server:~$ sed -n '1'p test.txt
Hello,world!
pengzw@super-server:~$ sed -n '1p' test.txt
Hello,world!

9)末行

pengzw@super-server:~$ sed -n '$p' test.txt
I have $1.

10)打印行号
要打印行号,使用等号=。打印模式匹配的行号,使用格式/pattern/ =。
整个文件都打印出来,并且匹配行打印了行号。

pengzw@super-server:~$ sed -e '/.u/=' test.txt
Hello,world!
Write a word!
I love dog!
4
Good good study, day day up!
I have $1.

如果只关心实际行号,使用-n选项。

pengzw@super-server:~$ sed -n '/.u/=' test.txt
4

如果只打印行号及匹配行,必须使用两个sed命令,并使用e选项。第一个命令打印模式
匹配行,第二个使用=选项打印行号,格式为sed -n -e /pattern/p -e /pattern/=。

pengzw@super-server:~$ sed -n -e '/u/p' -e '/u/='  test.txt
Good good study, day day up!
4

参考:

linux与unix shell编程指南.pdf
https://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容