Unix/Linux - 使用SED进行正则表达式
你好,未来的命令行魔法师们!今天,我们将深入到正则表达式(regex)和Unix/Linux中强大的SED命令的神奇世界。系好安全带,因为我们即将开始一段激动人心的冒险,这将改变你操作文本的方式!
调用sed
让我们从基础开始。SED,代表“流编辑器”,是一个强大的文本处理工具。要使用它,我们只需输入“sed”然后跟上我们的命令。这就像召唤一个文本操作的精灵!
sed '命令' 文件名
例如:
sed 's/hello/bonjour/' greetings.txt
这个命令将greetings.txt文件中的“hello”替换为“bonjour”。简单吧?
sed的一般语法
sed的一般语法就像一个魔法咒语:
sed 选项... [脚本] [输入文件...]
别担心这个看起来令人畏惧。我们会一步步分解,就像解一个有趣的谜题!
使用sed删除所有行
想要让一个文件中的所有文本消失?sed可以做到!下面是如何操作:
sed 'd' 文件名
这将删除文件中的所有行。就像在数字笔记本上使用橡皮擦!
sed的地址
sed中的地址就像文本的GPS坐标。它们告诉sed在哪里施展魔法。以下是一些示例:
sed '2d' 文件.txt # 删除第2行
sed '/模式/d' 文件.txt # 删除包含'模式'的行
sed的地址范围
有时,我们想要在一系列行上施法。下面是如何操作:
sed '2,5d' 文件.txt # 删除第2到第5行
sed '2,$d' 文件.txt # 从第2行删除到文件末尾
替换命令
替换命令是sed的核心。它就像是“查找并替换”的加强版!
sed 's/旧/新/' 文件.txt
这会替换每行中第一次出现的“旧”为“新”。
替换标志
标志就像是替换命令的增强道具。以下是一些常见的标志:
标志 | 描述 |
---|---|
g | 替换所有出现,而不仅仅是第一个 |
i | 忽略大小写 |
p | 打印修改后的行 |
w | 将结果写入文件 |
示例:
sed 's/cat/dog/g' pets.txt
这将替换文件中所有的“cat”为“dog”。
使用替代字符串分隔符
有时,你的文本包含很多斜杠。别担心!我们可以使用不同的分隔符:
sed 's#/usr/local/bin#/common/bin#' 路径.txt
这里,我们使用'#'作为分隔符,而不是'/'。
使用空格替换
想要让文本消失得无影无踪?下面是如何操作:
sed 's/不需要的//g' 文件.txt
这将删除文件中所有的“不需要的”。
地址替换
我们可以结合地址和替换进行精确的文本编辑:
sed '3,6s/foo/bar/g' 文件.txt
这会将第3到第6行中的所有“foo”替换为“bar”。
匹配命令
匹配命令就像一束聚光灯,照亮我们感兴趣的行:
sed -n '/模式/p' 文件.txt
这将只打印包含“模式”的行。
使用正则表达式
现在我们来到了真正的魔法领域!正则表达式就像是超级通配符。以下是一个简单的例子:
sed -n '/^The/p' story.txt
这将打印所有以“The”开头的行。
匹配字符
正则表达式有特殊的字符,它们就像变形者:
字符 | 含义 |
---|---|
. | 任何单个字符 |
* | 前一个字符的零个或多个 |
^ | 行的开始 |
$ | 行的结束 |
示例:
sed -n '/c.t/p' animals.txt
这将匹配“cat”、“cot”、“cut”等。
字符类关键字
字符类就像一组字符的团队。以下是一些MVP成员:
类 | 匹配 |
---|---|
[:alpha:] | 字母字符 |
[:digit:] | 数字字符 |
[:alnum:] | 字母数字字符 |
示例:
sed -n '/[[:digit:]]/p' data.txt
这将打印包含任何数字的行。
使用与引用
与号(&)就像一个魔镜,反射匹配的内容:
sed 's/[0-9]/(&)/' numbers.txt
这将把每个数字放入括号中。
使用多个sed命令
想要一次施放多个咒语?使用-e选项:
sed -e 's/foo/bar/g' -e 's/baz/qux/g' 文件.txt
这将一次性执行两个替换!
反向引用
反向引用就像时间机器,允许我们重用匹配的部分:
sed 's/\(.*\):\([^:]*\)/\2:\1/' names.txt
这将交换冒号前后文本的位置。
至此,亲爱的学生们,我们已经穿越了sed和正则表达式的土地。记住,熟能生巧。所以,勇往直前,像正在成为的命令行巫师一样操作文本吧!快乐编码!
Credits: Image by storyset