在本文中,将介绍各种 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