sed简明教程.docx
- 文档编号:2848844
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:19
- 大小:19.62KB
sed简明教程.docx
《sed简明教程.docx》由会员分享,可在线阅读,更多相关《sed简明教程.docx(19页珍藏版)》请在冰豆网上搜索。
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;">I 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- sed 简明 教程