本文旨在帮助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用于选择和分析字符。
分享到:
相关推荐
### sed简明手册知识点概述 #### 一、sed简介与应用场景 **sed**(Stream Editor)是一种用于在Unix系统上进行文本编辑的强大工具。它能够处理流式输入数据,允许用户执行诸如查找、替换、删除等操作而无需修改原始...
本文档作为sed的简明教程,将通过实例演示sed的使用方法,并介绍其核心知识点。 首先,基础正则表达式的概念是sed使用的重要基础。在sed中,`^`符号代表一行的开头,`$`符号代表一行的结尾。例如,`/^#/`会匹配所有...
本简明教程将深入探讨这两个工具,帮助你更好地理解和掌握它们的用法。 awk,全称“AWK Pattern扫描和处理语言”,是一种编程语言,常用于在文本文件中进行模式匹配和数据提取。它的工作方式是读取一行文本,然后对...
### sed和awk简明手册知识点总结 #### 一、sed简介 - **基本概念**: - sed(stream editor)是一种非交互式的面向字符流的编辑器,它主要用于文本文件的处理,尤其适用于批量替换、删除、添加等操作。 - sed的...
SED的基本用法包括使用各种命令来操作文本,比如插入、删除、修改等。其中一个常用命令是“s”命令,它是用来替换文本中的字符串的。使用该命令时,首先指定要替换的原字符串,然后指定要替换成的新字符串,最后指定...
- **3.1.6 文件复制与移动**:掌握`cp`和`mv`命令的使用方法。 - **3.1.7 文件搜索**:使用`find`命令查找特定文件。 - **3.1.8 文件属性更改**:学习如何使用`chmod`、`chown`等命令修改文件权限和所有者。 - **...
在面向对象编程方面,Perl支持类和对象的创建,可以通过`package`定义一个类,使用`new`关键字实例化对象,通过`sub`定义方法。Perl5.6以后的版本还引入了角色(roles),提供了一种组合类行为的方式,增强了代码的...
3. **文本处理**:`grep`用于在文件中搜索特定字符串,`sed`进行流编辑,`awk`则是一个强大的文本分析工具。`tr`用于字符转换,`cut`用于截取字段。 4. **流程控制**:`if`、`else`、`for`、`while`等用于编写shell...
它融合了C、sed、awk等语言的特点,允许开发者用多种风格编写代码。Perl的弱类型系统使得变量声明简洁,但这也要求程序员更加注意类型转换。此外,Perl支持模式匹配,这是它在文本处理领域中的强大工具,可以高效地...
### Ansible 应用方法 1. **模块和错误处理**:Ansible 提供了大量的模块,用于执行各种任务,如系统管理、软件安装等。当遇到模块的弃用警告或错误时,需要根据提示进行修复。例如,上述文本中提到的 `docker` ...
- **文件压缩与解压**:讲解了常用的文件压缩与解压命令,如gzip、bzip2、tar等的使用方法。 - **文件比较**:介绍了如何使用命令行工具来比较两个文件的内容差异。 - **文本处理工具**:介绍了用于文本处理的命令,...
《Red Flag Linux Desktop 6.0简明用户手册》是一本专为Linux初学者准备的指导书籍,旨在帮助读者快速掌握Red Flag Linux Desktop 6.0操作系统的基本使用方法。Red Flag Linux是由中国红旗软件有限公司开发的一款...
需要注意的是,正则表达式并不是一个程序,而是一种用于解决字符串的一种模式,假如你想用它来解决字符串,就必须使用支持正则表达式的工具,比如Linux中的awk、sed、grep,或者编程语言Perl、Python、Java等等。...
你可以创建类(class),定义方法(method),并使用继承、封装和多态等概念。使用关键字package定义类,use关键字导入模块,提供代码重用。 Perl的模块系统是其强大功能的一个体现。Perl模块可以从CPAN...
本教程将带你深入理解Ubuntu命令行的基本用法,这对于系统管理、软件安装、文件操作等任务来说至关重要。 一、启动与关闭命令行 在Ubuntu桌面环境中,你可以通过快捷键`Ctrl+Alt+T`快速打开终端。关闭命令行通常只...
Perl的设计理念是融合了多种编程语言的优点,特别是汲取了C语言的强大功能、sed和awk的文本处理能力,以及shell脚本的易用性,形成了一个高效且灵活的脚本语言。 Perl的主要特点包括: 1. **文本处理**:Perl在...
使用手册的用户可以通过参考这份文档,快速地找到他们需要执行操作的命令及其使用方法,从而提高工作效率。 Linux指令的使用是通过命令行界面(CLI)来完成的,与图形用户界面(GUI)不同,它依赖于用户对命令的...
尽管Linux的学习曲线可能比较陡峭,但本书通过逐步引导,让读者能够更容易地掌握命令行的使用方法。 书中还强调了Linux的“自由”哲学。自由在这里不仅仅是指成本上的免费,更重要的是在软件使用上的自由。Linux...