第1章:sed语法和基本命令(1)

第1章:sed语法和基本命令

在sed所有的例子中,我们将使用下面的这个文件employee.txt。rhce sed awk

请先创建好这个文本文件,然后练习本书的命令。

$ vi employee.txt

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

104,Anand Ram,Developer

105,Jane Miller,Sales Manager

上述雇员表中每行都包括如下字段:

•员工ID

•员工姓名

•标题

sed属于流编辑器,它在操作、过滤和替换文本方面是一个非常强大的工具。sed可以从文件或者管道读取内容。

对于初学者来说,sed脚本可能看起来难以理解。 不过您一旦理解了sed命令的细节,您就可以快速的写一个sed脚本来解决很多复杂的文本问题。

在这本书中,我已经解释了sed所有的命令,并提供了易于理解的例子。

1sed命令语法

本节的目标是为了让您更熟悉sed语法和命令结构。 这并不是说要解释每个sed命令,这些命令将会在后面详细讲解。

sed的基本语法:

sed [options] { sed-commands } { input-file }

sed每次从{input-file}读取一行,然后在这行上执行{ sed-commands }。

sed首先读取{ input-file }的第一行,并对第一行执行{ sed-commands } 。 然后读取{ input-file }的第二行并对第二行执行{ sed-commands }。 以此类推,直到{ input-file }最后一行。

有几个可选的选项,在sed用法中用 [options]表示。

下面的例子演示了sed的基本用法。这简单的sed例子用来显示/etc/ passwd中所有的行。

sed -n 'p' /etc/passwd

这里的重点是{ sed-commands },它可以是一个单一的sed命令或多个sed命令。 您也可以把多个sed命令在一个文件中,然后用-f选项来调用这个sed脚本,如下所示。

使用文件的用法:

sed [options] -f {sed-commands-in-a-file} {input-file}

下面的例子演示了这个用法。 这个例子用来显示/etc/passwd中开头是root和开头是nobody的行。

$ vi test-script.sed

/^root/ p

/^nobody/ p

$ sed -n -f test-script.sed /etc/passwd

当执行多个sed命令时,也可以直接在命令行中用-e指定,如下所示。

使用-e的用法:

sed [options] -e {sed-command-1} -e {sed-command-2}  {input-file}

下面的例子演示了这个用法。 这个例子用来显示/etc/passwd中开头是root和开头是nobody的行。

sed -n -e '/^root/ p' -e '/^nobody/ p' /etc/passwd

如果在命令行中用-e指定了很多命令的话,您可以使用\分成多行来写,如下所示。

sed -n \

-e '/^root/ p' \

-e '/^nobody/ p' \

/etc/passwd

您也可以把要执行的多个命令放在{}里:

使用{}的用法:

sed [options] '{

sed-command-1

sed-command-2

}' input-file

下面的例子演示了这个用法。也是显示/etc/passwd中以root开头和以nobody开头的行。

sed -n '{

/^root/ p

/^nobody/ p

}' /etc/passwd

注:sed不会修改原文件,它总是输出到标准输出(stdout)。 如果您想保存,您应该使用 > filename.txt 把输出重定向到文件中。




声明: 本文由(老段)原创编译,转载请保留链接:http://www.rhce.cc/2013/05/26/sed%e5%92%8cawk-101%e4%b8%aa%e6%8a%80%e5%b7%a7-%e8%bf%9e%e8%bd%bd/

你可能感兴趣的:(sed)