sed简明教程.docx

上传人:b****3 文档编号:2848844 上传时间:2022-11-15 格式:DOCX 页数:19 大小:19.62KB
下载 相关 举报
sed简明教程.docx_第1页
第1页 / 共19页
sed简明教程.docx_第2页
第2页 / 共19页
sed简明教程.docx_第3页
第3页 / 共19页
sed简明教程.docx_第4页
第4页 / 共19页
sed简明教程.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

sed简明教程.docx

《sed简明教程.docx》由会员分享,可在线阅读,更多相关《sed简明教程.docx(19页珍藏版)》请在冰豆网上搜索。

sed简明教程.docx

sed简明教程

sed简明教程(转)2013-03-3015:

51:

19

分类:

LINUX

sed全名叫streameditor,流编辑器,用程序的方式来编辑文本,相当的hacker啊。

sed基本上就是玩正则模式匹配,所以,玩sed的人,正则表达式一般都比较强。

同样,本篇文章不会说sed的全部东西,你可以参看sed的手册,我这里主要还是想和大家竞争一下那些从手机指缝间或马桶里流走的时间,用这些时间来学习一些东西。

当然,接下来的还是要靠大家自己双手。

用s命令替换

我使用下面的这段文本做演示:

$ cat pets.txt

Thisismy cat

  my cat'snameisbetty

Thisismydog

  mydog'snameisfrank

Thisismyfish

  myfish'snameisgeorge

Thisismygoat

  mygoat'snameisadam

把其中的my字符串替换成HaoChen’s,下面的语句应该很好理解(s表示替换命令,/my/表示匹配my,/HaoChen’s/表示把匹配替换成HaoChen’s,/g表示一行上的替换所有的匹配):

$ sed "s/my/Hao

Chen's/g" pets.txt

ThisisHaoChen's cat

  HaoChen'scat'snameis

betty

ThisisHaoChen'sdog

  HaoChen'sdog'snameis

frank

ThisisHaoChen'sfish

  HaoChen'sfish'snameis

george

ThisisHaoChen'sgoat

  HaoChen'sgoat'snameis

adam

注意:

如果你要使用单引号,那么你没办法通过\’这样来转义,就有双引号就可以了,在双引号内可以用\”来转义。

再注意:

上面的sed并没有对文件的内容改变,只是把处理过后的内容输出,如果你要写回文件,你可以使用重定向,如:

$ sed "s/my/Hao

Chen's/g" pets.txt>hao_pets.txt

或使用-i参数直接修改文件内容:

$ sed -i "s/my/Hao

Chen's/g" pets.txt

在每一行最前面加点东西:

$ sed 's/^/#/g' pets.txt

#Thisismycat

# mycat'snameisbetty

#Thisismydog

# mydog'snameisfrank

#Thisismyfish

# myfish'snameisgeorge

#Thisismygoat

# mygoat'snameisadam

在每一行最后面加点东西:

$ sed 's/$/---

/g' pets.txt

Thisismy cat ---

  my cat'snameisbetty

---

Thisismydog---

  mydog'snameisfrank---

Thisismyfish---

  myfish'snameisgeorge---

Thisismygoat---

  mygoat'snameisadam---

顺手介绍一下正则表达式的一些最基本的东西:

^表示一行的开头。

如:

/^#/以#开头的匹配。

$表示一行的结尾。

如:

/}$/以}结尾的匹配。

\<表示词首。

如 \

\>表示词尾。

如abc\>表示以abc結尾的詞。

.表示任何单个字符。

*表示某个字符出现了0次或多次。

[]字符集合。

如:

[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。

如果其中有^表示反,如[^a]表示非a的字符

正规则表达式是一些很牛的事,比如我们要去掉某html中的tags:

html.txt

1

Thisiswhat

underline;">Imeant.

Understand?

看看我们的sed命令

#如果你这样搞的话,就会有问题

$ sed 's/<.*>//g' html.txt

 Understand?

#要解决上面的那个问题,就得像下面这样。

#其中的'[^>]'指定了除了>的字符重复0次或多次。

$ sed 's/<[^>]*>//g' html.txt

ThisiswhatImeant.Understand?

我们再来看看指定需要替换的内容:

$ sed "3s/my/your/g" pets.txt

Thisismy cat

  my cat'snameisbetty

Thisisyourdog

  mydog'snameisfrank

Thisismyfish

  myfish'snameisgeorge

Thisismygoat

  mygoat'snameisadam

下面的命令只替换第3到第6行的文本。

$ sed "3,6s/my/your/g" pets.txt

Thisismy cat

  my cat'snameisbetty

Thisisyourdog

  yourdog'sname

isfrank

Thisisyourfish

  yourfish'sname

isgeorge

Thisismygoat

  mygoat'snameisadam

$ cat my.txt

Thisismy cat,my cat'sname

isbetty

Thisismydog,mydog'snameisfrank

Thisismyfish,myfish'snameisgeorge

Thisismygoat,mygoat'snameisadam

只替换每一行的第一个s:

$ sed 's/s/S/1' my.txt

ThiSismy cat,my cat'sname

isbetty

ThiSismydog,mydog'snameisfrank

ThiSismyfish,myfish'snameisgeorge

ThiSismygoat,mygoat'snameisadam

只替换每一行的第二个s:

$ sed 's/s/S/2' my.txt

ThisiSmy cat,my cat'sname

isbetty

ThisiSmydog,mydog'snameisfrank

ThisiSmyfish,myfish'snameisgeorge

ThisiSmygoat,mygoat'snameisadam

只替换第一行的第3个以后的s:

$ sed 's/s/S/3g' my.txt

Thisismy cat,my cat'Sname

iSbetty

Thisismydog,mydog'SnameiSfrank

ThisismyfiSh,myfiSh'SnameiSgeorge

Thisismygoat,mygoat'SnameiSadam

多个匹配

如果我们需要一次替换多个模式,可参看下面的示例:

(第一个模式把第一行到第三行的my替换成your,第二个则把第3行以后的This替换成了That)

$ sed '1,3s/my/your/g;

3,$s/This/That/g' my.txt

Thisisyour cat,your cat's

nameisbetty

Thisisyourdog,yourdog'snameis

frank

Thatisyourfish,yourfish'snameis

george

Thatismygoat,mygoat'snameisadam

上面的命令等价于:

(注:

下面使用的是sed的-e命令行参数)

sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' my.txt

我们可以使用&来当做被匹配的变量,然后可以在基本左右加点东西。

如下所示:

$ sed 's/my/[&]/g' my.txt

Thisis[my] cat,[my] cat's

nameisbetty

Thisis[my]dog,[my]dog'snameis

frank

Thisis[my]fish,[my]fish'snameis

george

Thisis[my]goat,[my]goat'snameis

adam

圆括号匹配

使用圆括号匹配的示例:

(圆括号括起来的正则表达式所匹配的字符串会可以当成变量来使用,sed中使用的是\1,\2…)

$ sed 's/Thisismy

\([^,]*\),.*is\(.*\)/\1:

\2/g' my.txt

cat:

betty

dog:

frank

fish:

george

goat:

adam

上面这个例子中的正则表达式有点复杂,解开如下(去掉转义字符):

正则为:

Thisismy([^,]*),.*is(.*)

匹配为:

Thisismy(cat),……….is(betty)

然后:

\1就是cat,\2就是betty

sed的命令

让我们回到最一开始的例子pets.txt,让我们来看几个命令:

N命令

先来看N命令——把下一行的内容纳入当成缓冲区做匹配。

下面的的示例会把原文本中的偶数行纳入奇数行匹配,而s只匹配并替换一次,所以,就成了下面的结果:

$ sed 'N;s/my/your/' pets.txt

Thisisyour cat

  my cat'snameisbetty

Thisisyourdog

  mydog'snameisfrank

Thisisyourfish

  myfish'snameisgeorge

Thisisyourgoat

  mygoat'snameisadam

也就是说,原来的文件成了:

Thisismy cat\n my cat's

nameisbetty

Thisismy

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1