sed命令

时间:2019-04-29 03:17:28  来源:igfitidea点击:

什么是SED?

SED是一种流(stream )编辑器,它使您可以从文件或命令的输出中修改输入流的文本。缺省情况下,sed在大多数Linux发行版中都可用。

显示sed版本:

john@sles01:~/testing> sed --version
GNU sed version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.

sed示例

以下示例中使用了以下test.txt文件:

john@sles01:~/testing> cat test.txt
one      two       three    four      five          six
John     246810    team01   UK        Birmingham    FTE
Paul     135790    team02   UK        Glasgow       FTE
Marcus   049583    team03   DE        Bremen        PTE
Foxy     903485    team01   UK        Aston         PTE

使用sed进行简单的字符串替换

以下命令将搜索文件,并用string1替换string2,然后创建一个名为newfile.txt的新文件。

john@sles01:~/testing> sed 's/UK/GB/' test.txt > newfile.txt
john@sles01:~/testing> cat newfile.txt
one      two       three    four      five          six
John     246810    team01   GB        Birmingham    FTE
Paul     135790    team02   GB        Glasgow       FTE
Marcus   049583    team03   DE        Bremen        PTE
Foxy     903485    team01   GB        Aston         PTE

在上面的例子中,我们用新的字符串GB替换了字符串UK

提取文件的第一行

john@sles01:~/testing> sed -n '1p' test.txt
one      two       three    four      five          six

提取文件的第二行

john@sles01:~/testing> sed -n '2p' test.txt
John     246810    team01   UK        Birmingham    FTE

提取文件最后一行

john@sles01:~/testing> sed -n '$p' test.txt
Foxy     903485    team01   UK        Aston         PTE

提取文件中除第一行之外的所有行

john@sles01:~/testing> sed -n '1!p' test.txt
John     246810    team01   UK        Birmingham    FTE
Paul     135790    team02   UK        Glasgow       FTE
Marcus   049583    team03   DE        Bremen        PTE
Foxy     903485    team01   UK        Aston         PTE

从文件中提取第2、3和4行

john@sles01:~/testing> sed -n '2,4p' test.txt
John     246810    team01   UK        Birmingham    FTE
Paul     135790    team02   UK        Glasgow       FTE
Marcus   049583    team03   DE        Bremen        PTE

提取包含指定字符串的行

下面的示例显示包含字符串 FTE的任何行

john@sles01:~/testing> sed -n -e '/FTE/p' test.txt
John     246810    team01   UK        Birmingham    FTE
Paul     135790    team02   UK        Glasgow       FTE

提取以指定字符串开头的行

下面的示例从文件中提取以字符串John开头的行。

john@sles01:~/testing> sed -n -e '/^John/p' test.txt
John     246810    team01   UK        Birmingham    FTE

提取以指定字符串结尾的行

下面的示例提取以指定的字符串PTE结尾的行。

john@sles01:~/testing> sed -n -e '/PTE$/p' test.txt
Marcus   049583    team03   DE        Bremen        PTE
Foxy     903485    team01   UK        Aston         PTE

从文件中删除空白行

在此示例中,我们将删除所有空白行。我们还可以使用重定向从此输出创建一个新文件。
包含空白行的示例文件:

john@sles01:~/testing> cat test2.txt
one      two       three    four      five          six

John     246810    team01   UK        Birmingham    FTE

Paul     135790    team02   UK        Glasgow       FTE

Marcus   049583    team03   DE        Bremen        PTE

Foxy     903485    team01   UK        Aston         PTE

执行命令:sed -e'/^$/d' test2.txt

john@sles01:~/testing> sed -e '/^$/d' test2.txt
one      two       three    four      five          six
John     246810    team01   UK        Birmingham    FTE
Paul     135790    team02   UK        Glasgow       FTE
Marcus   049583    team03   DE        Bremen        PTE
Foxy     903485    team01   UK        Aston         PTE

使用重定向将输出写入新文件

john@sles01:~/testing> sed -e '/^$/d' test2.txt > test3.txt

john@sles01:~/testing> cat test3.txt
one      two       three    four      five          six
John     246810    team01   UK        Birmingham    FTE
Paul     135790    team02   UK        Glasgow       FTE
Marcus   049583    team03   DE        Bremen        PTE
Foxy     903485    team01   UK        Aston         PTE