sed命令格式
下面显示了 sed 命令的语法:
# sed [options] 'action [args]' files [ > outfile]
sed 编辑器能够使用正则表达式语法执行文本模式替换和文本模式删除。
这些与 grep 使用的正则表达式字符相同。
sed 命令提供的功能是交互式文本编辑的扩展。
如果我们需要在大量文件中搜索和替换文本字符串,sed 是最有用的。
使用 sed 打印文本
示例 1:打印行范围
以下示例显示了 p(打印)命令的使用,该命令将一系列行打印到标准输出。
范围由起始地址、逗号和结束地址指定。
sed 的默认输出是它读取的每一行。
要禁止默认输出,请使用 -n 选项。
# sed -n '3,5p' data.txt southwest SW Chris Foster 33 southern SO Jan Chin 45 southeast SE Derek Johnson 3
示例 2:打印包含特定图案的行
以下命令打印所有带有模式 west 的行。
使用正斜杠 (/) 分隔正则表达式。
# sed -n '/west/p' data.txt northwest NW oirl Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33
示例 3 :具有多个图案的印刷线
以下命令打印包含模式 west 的第一行,直到并包括包含模式 south 的下一行。
# sed -n '/west/,/southern/p' data.txt northwest NW oirl Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO Jan Chin 45
示例 4:打印带有图案的行和之后的所有行
以下命令打印包含模式 Chris 的第一行,直到文件的最后一行。
# sed -n '/Chris/,$p' data.txt southwest SW Chris Foster 33 southern SO Jan Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
示例 5:类似于 grep 的功能
该模式可能包含 grep 使用的正则表达式字符。
以下示例打印所有以 s 开头并以 5 结尾的行。
# sed -n '/^s.*5$/p' data.txt southern SO Jan Chin 45
添加 sed 功能 - 编辑命令
下表显示了其他 sed 编辑器命令。
命令 | 功能 |
---|---|
a | 附加文本 |
c | 用新文本更改当前行中的文本 |
i | 在当前行上方插入文本 |
sed 编辑器简介
术语 sed 代表流编辑器。
Sed 可以从标准输入获取其输入,在流上应用请求的编辑,并自动将结果放入标准输出。
sed 语法允许在命令行上指定输入文件。
我们不需要在 sed 编辑器运行时与它进行交互;因此,它也被称为批处理编辑器。
这与 vi 和 ed 等交互式编辑器形成对比。
因为 sed 不需要交互,所以我们可以将 sed 命令放在脚本中。
我们可以调用脚本文件并针对数据文件运行它以执行重复的编辑操作。
使用 sed 替换文本
Command | 例子 | 编辑动作 |
---|---|---|
s | sed s/x/y/选项 | 搜索和替换。 搜索模式 x 替换为模式 y。 搜索和替换模式在大多数情况下是正则表达式,并且可以通过各种选项影响搜索和替换行为。 |
y | sed y/abc/xyz/ | 将源字符集中的每个字符替换为目标字符集中具有相同位置的字符。 |
示例 1:搜索和替换特定模式
sed s 命令允许对文本进行搜索和替换操作。
该命令使用模式搜索和文字字符串替换。
替换字符串字符按字面意思进行,没有元字符扩展。
# sed 's/3/X/' data.txt northwest NW oirl Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster X3 southern SO Jan Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
sed 命令检查文件的每一行,并用新字符串替换第一次出现的旧字符串。
同一行中旧字符串的后续出现保持不变。
示例 2:全局搜索和替换特定模式
以下示例显示了 g(全局)命令和 s(搜索和替换)命令,它用新字符串替换所有出现的旧字符串。
# sed 's/3/X/g' data.txt northwest NW oirl Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster XX southern SO Jan Chin 45 southeast SE Derek Johnson X eastern EA Susan Beal X4 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
示例 3:使用替换中包含的搜索模式进行搜索和替换
有时,通过搜索和替换,旧字符串将成为新替换字符串的一部分,我们可以通过在替换字符串中放置 &(与号)来实现这一点。
& 的位置决定了旧字符串在替换字符串中的位置。
以下示例的目的是编写一个命令,该命令搜索最后一个字段中以一位数字结尾的所有行,并将一位数字替换为一位数字加上字符串 Single Doirt。
要正确识别最后一个字段中具有一位数的行,请考虑以下 sed 命令。
制表符将每一行的字段分开。
sed -n '/ [0-9]$/p' data.txt southeast SE Derek Johnson 3
以下命令搜索在最后一个字段中以一位数字结尾的所有行,并将一位数字替换为一位数字加上字符串 Single Doirt。
# sed 's/ [0-9]$/& Single Doirt/' data.txt northwest NW oirl Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO Jan Chin 45 southeast SE Derek Johnson 3 Single Doirt eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
使用 sed 删除文本
示例 1:删除一系列行
以下命令从输出中删除第 4 行到第 8 行。
# sed '4,8d' data.txt northwest NW oirl Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 central CT Sheri Watson 44
示例 2:删除包含特定模式的行
以下命令删除任何包含模式 west 的行。
# sed '/west/d' data.txt southern SO Jan Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
示例 3
以下命令删除任何以模式 west 开头的行。
# sed '/^west/d' data.txt northwest NW oirl Craig 10 southwest SW Chris Foster 33 southern SO Jan Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44
示例 4
以下命令删除从包含模式向南的第一行开始,一直到包含北部的文件的下一行的行范围。
# sed '/south/,/north/d' data.txt northwest NW oirl Craig 10 western WE Sharon Kelly 40 north NO Val Shultz 91 central CT Sheri Watson 44
在单个 sed 命令中放置多个编辑
有时我们想对文件执行多次编辑。
我们可以使用 -e 选项将编辑放在同一命令行中,而不是使用多个 sed 命令。
编辑按我们指定的顺序执行。
示例 1
删除行必须非常小心。
我们可以对一行文本执行编辑,然后从输出中删除该行文本。
这发生在以下示例中,输入文件的第 1 行。
# sed -e 's/north/North/' -e '1,4d' data.txt southeast SE Derek Johnson 3 eastern EA Susan Beal 34 Northeast NE TJ Nichols 67 North NO Val Shultz 91 central CT Sheri Watson 44
编辑命令
sed 编辑器使用的编辑命令(如表所示)与用于 vi 和 ed 的编辑命令类似。
命令 | 功能 |
---|---|
d | 删除行 |
p | 打印行 |
r | 读取文件 |
s | 用一个字符串替换另一个 |
w | 写入文件 |
sed 命令有两个选项:
选项 | 功能 |
---|---|
-n | 抑制默认输出 |
-f | 从脚本文件中读取 sed 命令 |
示例中使用的示例数据
以下示例针对名为“data.txt”的文件执行 sed 命令。
文件data.txt的内容如下。
# cat data.txt northwest NW oirl Craig 10 western WE Sharon Kelly 40 southwest SW Chris Foster 33 southern SO Jan Chin 45 southeast SE Derek Johnson 3 eastern EA Susan Beal 34 northeast NE TJ Nichols 67 north NO Val Shultz 91 central CT Sheri Watson 44