Linux SED命令示例

在本文中,将介绍各种 sed 表达式,这些表达式可用于和组合以打印或者删除文件中的特定行

重要的提示:

我提供的示例仅用于打印执行的操作,
如果要执行删除操作, 删除命令的'-n'选项 并在单个命令上将 'p' 替换为 'd'

要在执行删除操作后将输出保存到新文件,请使用以下语法

# sed -e 'your regex' /old/file > /new/file2

要将操作保存在同一文件中,请使用以下语法

# sed -i 'your regex' /path/to/file

我们的示例文件

# cat /tmp/file
one
two
three
four
five
six

1. linux使用sed命令打印文件的第一行

下面的命令将打印文件的第一行

# sed -ne '1p' /tmp/file
one

2. linux使用sed命令打印文件的最后一行

在正则表达式中“$”表示最后,因此同样可以用于打印最后一行

可以使用下面的 sed 正则表达式

# sed -ne '$p' /tmp/file
six

3. linux使用sed命令打印指定的行

在我的示例文件中,我有六行,所以让我们尝试打印第二行

使用以下语法仅打印第二行

# sed -ne '2p' /tmp/file
two

下面的正则表达式将只打印第 4 行

# sed -ne '4p' /tmp/file
four

4.linux使用sed命令根据行号打印多行

在上面的示例中,我们打印了单行,但如果我们有要执行工作的行号列表,也可以这样做。

要使用行号打印多行,请使用“;” (分号)做如下例所示的工作

我们还可以使用以下命令打印第 2 个和第 4 个文件编号

# sed -ne '2p;4p' /tmp/file
two
four

可以使用以下语法为“n”行号完成相同的操作

# sed -ne '2p;5p;7p' /path/to/file

我在这里打印第 2、5 和 7 行

5. linux使用sed命令打印文件中特定行号之间的行

在上面的例子中,我们删除/打印特定的行号,但是如果你想打印两个行号之间的行怎么办

在上面的命令中,分号用于打印特定的行号,但要在范围之间打印,请使用逗号,如下例所示

使用下面的 sed 正则表达式,我们可以打印“二”和“四”之间的内容

# sed -ne '2,4p' /tmp/file
two
three
four

6. 打印除指定行之外的所有其他行

其中我们想打印文件的所有其余内容,而不是我们要保存/打印的行号。
我们将使用 '!p' 而不是使用 'p',它应该可以完成工作。

打印文件的内容,不包括第 2 行和第 4 行之间的内容

# sed -ne '2,4!p' /tmp/file
one
five
six

接下来打印除第一行之外的所有行

# sed -ne '1!p' /tmp/file
two
three
four
five
six

接下来打印除最后一行之外的所有行

# sed -ne '$!p' /tmp/file
one
two
three
four
five

7. 打印所有匹配模式的行

下面的示例可以打印匹配模式的(列表)特定行,例如我们正在搜索的模式 os 'two'

# sed -ne '/two/p' /tmp/file
two

8 打印两个匹配模式之间的所有行

在我们的示例文件中,我想打印“一”和“四”之间的内容,因此我们的 sed 必须在这两个匹配模式之间执行所需的操作

同样打印相同的

# sed -ne '/one/,/four/p' /tmp/file
one
two
three
four

9. linux使用sed命令打印匹配之后的 'n' 行

使用 '+n' 使用以下语法在匹配后打印 'n' 行

如果我们希望打印匹配项和匹配项后的另一行,请使用以下命令

# sed -ne '/one/,+1p' /tmp/file
one
two

同样,如果我们希望在匹配后打印 2 行

# sed -ne '/one/,+2p' /tmp/file
one
two
three

10. linux使用sed命令打印所有有数值的行

在这里让我们将我们的示例文件更改为下面

# cat /tmp/file
one 1
2 two
three 2003
4 four
five 55
six 666

这里首先打印所有以数值开头的行

# sed -ne '/^[0-9]/p' /tmp/file
2 two
4 four

仅打印具有两个或者多个数值的所有行

# sed -ne '/[0-9][0-9]/p' /tmp/file
three 2003
five 55
six 666

打印所有以数值结尾的行

# sed -ne '/[0-9]$/p' /tmp/file
one 1
three 2003
five 55
six 666
日期:2020-06-02 22:18:43 来源:oir作者:oir