学习shell编程中的神器——sed
本文目录导读:1、什么是sed?2、基础用法3、高级用法4、删除行5、插入和追加文本6、正则表达式在学习shell编程过程中,有一款非常强大的工具——sed。它是一个流编辑器,可以对文本进行各种操作,包括替换、删除、插入等等。如果你熟练掌握了sed,那么在处理文本时将事半功倍。什么是sed?首先我们来看一下sed是什么。Sed(Str……
在学习shell编程过程中,有一款非常强大的工具——sed。它是一个流编辑器,可以对文本进行各种操作,包括替换、删除、插入等等。如果你熟练掌握了sed,那么在处理文本时将事半功倍。
什么是sed?
首先我们来看一下sed是什么。Sed(Stream Editor)是Unix/Linux系统下的一款非交互式编辑器,它只能通过命令行来使用。与其他文本编辑器不同之处在于:其他编辑器都需要打开文件后进行操作;而Sed则直接读取文件,并根据所给定的命令来处理数据并输出到标准输出设备上。
基础用法
现在我们开始介绍如何使用sed进行简单的文本操作。首先我们要知道一个最基本的命令——s(substitute),它用于替换字符串。
下面以一个例子说明:
假设我们有一个名为test.txt的文件,其中包含以下内容:
“`
hello world
现在我们想把world替换成everybody,请执行以下命令:
$ sed ‘s/world/everybody/’ test.txt
执行结果如下:
hello everybody
这里解释一下上述命令中各个部分的含义:
– s:表示substitute,即替换。
– /world/everybody/:这是替换规则。其中第一个斜杠后面跟的是要被替换的字符串,第二个斜杠后面跟的是要替换成的字符串。
如果想直接修改原文件,可以使用-i参数:
$ sed -i ‘s/world/everybody/’ test.txt
此时test.txt中的内容已经被修改为:
高级用法
除了基本用法之外,sed还有很多强大而复杂的功能。下面我们来介绍一些高级用法。
删除行
goodbye world
nice to meet you
现在我们想把包含world这个词语的行全部删除,请执行以下命令:
$ sed ‘/world/d’ test.txt
– /world/:表示匹配包含world这个词语的行。
– d:表示删除匹配到的行。
插入和追加文本
hello world!
goodbye world!
nice to meet you!
现在我们想在每行的末尾加上一个感叹号,请执行以下命令:
$ sed ‘s/$/!/’ test.txt
hello world!!
goodbye world!!
nice to meet you!!
– $:表示匹配每行的末尾。
– /!/:表示在每行的末尾添加一个感叹号。
如果我们想在每行开头插入一段文本,可以使用i参数。比如我们要在每行开头插入一段话“Here is a new line”,则可以执行以下命令:
$ sed ‘i Here is a new line’ test.txt
Here is a new line
正则表达式
sed支持正则表达式,因此我们可以使用正则表达式来进行更加复杂的文本操作。比如我们有一个名为test.txt的文件,其中包含以下内容:
1 apple 10.2 USD
2 banana 20.3 USD
3 cherry 30.4 USD
4 date 40.5 USD
5 elderberry 50.6 USD
6 figs 60.7 USD
7 grapefruit 70.8 USD
8 honeydew melon 80.9 USD
9 kiwi fruit 90.0 USD
10 lemonade with sugar and ice cubes and mint leaves and watermelon flavoring 100.1 USD
现在我们想把所有水果的价格都加上20,请执行以下命令:
$ sed -E ‘s/(^ *[0-9]+ )([a-z ]+)([0-9]+.[0-9]+ USD)/12$(echo 3+20 | bc) USD/’ test.txt
2 banana $(echo 20.3+20 | bc) USD
3 cherry $(echo 30.4+20 | bc) USD
4 date $(echo 40.5+20 | bc) USD
5 elderberry $(echo 50.6+20 | bc) USD
6 figs $(echo 60.7+20 | bc) USD
7 grapefruit $(echo 70.8+20 | bc) USD
8 honeydew melon $(echo 80.9+20 | bc) USD
9 kiwi fruit $(echo 90.0+20 | bc) USD
10 lemonade with sugar and ice cubes and mint leaves and watermelon flavoring $120.1USD
– -E:表示使用扩展正则表达式。
– (^ *[0-9]+ ):表示匹配行首的数字和空格。
– ([a-z ]+):表示匹配水果名称。
– ([0-9]+.[0-9]+USD):表示匹配价格。
– 1、2、3:分别代表第一部分、第二部分和第三部分的内容。这里用到了引用组的功能。
– $(echo 3+20 | bc) USD:表示把价格加上20后再输出,并且添加上USD后缀。
以上就是sed的一些基础和高级用法。通过学习,我们可以看到sed在文本处理中是非常强大而实用的工具。希望这篇文章对你有所帮助,也希望你能够深入学习并掌握这个神器。