本文旨在帮助sed新手快速熟悉sed的常见用法。
首先,用如下文件作为源文件pets.txt:
This is my cat
my cat's name is betty
This is my dog
my dog's name is frank
This is my fish
my fish's name is george
This is my goat
my goat's name is adam
替换命令s
把文本中所有的my替换为your:
(其中s代表替换命令,g代表全行替换)
$cat pets.txt | sed 's/my/your/g' >> pets1.txt
把文本中的第1行my替换为your:
$cat pets.txt | sed '1s/my/your/g' >> pets1.txt
把文本中的第1~3行my替换为your:
$cat pets.txt | sed '1,3s/my/your/g' >> pets1.txt
替换每一行的第1个my
$cat pets.txt | sed 's/my/your/1' >> pets1.txt
替换每一行的第2个my
$cat pets.txt | sed 's/my/your/2' >> pets1.txt
替换每一行的第3个my以及之后的
$cat pets.txt | sed 's/my/your/3g' >> pets1.txt
在pets1.txt的每一行的开头加上#
cat pets1.txt | sed 's/^/#/g' >> pets2.txt
在pets2.txt的每一行的结尾加上----
cat pets2.txt | sed 's/$/----/g' >> pets3.txt
在上面的两个例子中,^代表每行的开头,$代表每行的结尾,顺便说下正则表达式的一些最基本的东西:
^ 表示一行的开头。如:/^#/ 以#开头的匹配。
$ 表示一行的结尾。如:/}$/ 以}结尾的匹配。
\< 表示词首。 如 \<abc 表示以 abc 为首的詞。
\> 表示词尾。 如 abc\> 表示以 abc 結尾的詞。
. 表示任何单个字符。
* 表示某个字符出现了0次或多次。
[ ] 字符集合。 如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有^表示反,如[^a]表示非a的字符
正则表达式是很牛逼的,比如test.html:
<b>This</b> is what <span style="text-decoration: underline;">I</span> meant.
要去掉其中的标签:(其中[^>]*表示0个或者多个非>字符)
cat test.html | sed 's/<[^>]*>//g'
预取命令N
将文本pets.txt的偶数行加到奇数行后面:
cat pets.txt | sed 'N; s/\n/,/g' >> mypets.txt
输出结果是酱紫的:
This is my cat, my cat's name is betty
This is my dog, my dog's name is frank
This is my fish, my fish's name is george
This is my goat, my goat's name is adam
使用圆括号匹配的示例:(圆括号括起来的正则表达式所匹配的字符串可以当成变量来使用,sed中使用的是\1,\2…)
比如:
cat mypets.txt | sed 's/This is my \([^,]*\), my .* \(.*\)/\1:\2/g'
结果如下:
cat:betty
dog:frank
fish:george
goat:adam
关于这条命令需要介绍一下,[^,]*表示0个或者多个非逗号字符,.*表示0个或多个任意字符。用括号来表示括号匹配,需要用转义字符\
插入命令i和a
以mypets.txt为例,在第一行之前插入一行:
cat mypets.txt | sed "1i This is my pig, my pig's name is bajie"
以mypets.txt为例,在第一行之后插入一行:
cat mypets.txt | sed "1a This is my pig, my pig's name is bajie"
我们可以运用匹配来添加文本,再dog后面插入一行:
cat mypets.txt | sed "/dog/a This is my pig, my pig's name is bajie"
整行替换命令c
以mypets.txt为例,将第二行替换:
cat mypets.txt | sed "2c This is my pig, my pig's name is bajie"
将dog所在行替换
cat mypets.txt | sed "/dog/c This is my pig, my pig's name is bajie"
整行删除命令c
以mypets.txt为例,将第二行删除:
cat mypets.txt | sed '2d'
以mypets.txt为例,将dog所在行替换:
cat mypets.txt | sed '/dog/d'
以mypets.txt为例,将第二行以及以后所有行删除:
cat mypets.txt | sed '2,$d'
整行打印命令p
找出/etc/passwd中包含root的行:
cat /etc/passwd | sed -n '/root/p'
上面的命令等价于
grep 'root' /etc/passwd
另外补充一点,覆盖原来的文件使用 -i,例子:
$cat pets.txt | sed 's/my/your/g' >> pets1.txt
覆盖原来的文件的写法为:
sed -i 's/my/your/g' pets.txt
以上内容转发整理自
http://coolshell.cn/articles/9104.html#more-9104
grep,sed,awk并成为linux三剑客,他们三个正好是一套处理字符的流程,grep用于查找目标字符,sed用于编辑字符,awk用于选择和分析字符。
分享到:
相关推荐
awk sed 简明教程
linux sed简明教程,通过最简单的案例,直观简洁的体验sed的神奇,讲解透彻,由浅入深,不知不觉掌握sed心法
sed 用法sed 用法sed 用法sed 用法sed 用法
sed 使用手册 unix 脚本必备
sed使用方法 sed使用方法详解sed使用方法详解sed使用方法详解
根据个人平时多年的学习积累,总结的sed所有用法,包括sed中删除,修改,添加,插入,合并,交换,读入,替换,跳转,标签,转换等高级用法!
linux 系统 sed 命令使用方法linux 系统 sed 命令使用方法linux 系统 linux 系统 sed 命令使用方法linux 系统 sed 命令使用方法sed 命令使用方法
linux shell命令sed的使用方法
sed中文指南 详细介绍了SED的用法与实例
sed高级用法.html 这个可要好好学一学,用得着,十分方便的工具
NULL 博文链接:https://chong-zh.iteye.com/blog/1807896
5.4: 正则表达式 、 sed基本用法 、 sed文本块处理.docx
学习sed、awk的简单入门,后面就要靠自己了
主要介绍一下linux中sed的用法;和上一个awk设计得一样;
SED全名叫stream editor,流编辑器,用程序的方式来编辑文本,相当 的hacker啊。sed基本上就是玩正则模式匹配,所以,玩sed的人,正则表达式一般都比较强。
多年工作实践总结Shell与Sed常用用法,都是必须要掌握的!
sed用法介绍,高阶应用
NULL 博文链接:https://hw1287789687.iteye.com/blog/1727749
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法