Unix命令搜索文件中的一行并替换它

时间:2013-03-02 12:06:36

标签: linux shell unix ubuntu

我正在尝试使用UnixCommandline替换配置文件而不使用像vi或nano这样的编辑器。

一个例子可能是:

ServerAdmin mail@example.com

我想找到以ServerAdmin开头的第一行或所有行,并将其替换为:

ServerAdmin secret@secret.com

有没有命令做这样的事情?应该可以使用CygWin中提供的标准UNIX工具。

3 个答案:

答案 0 :(得分:5)

sed -i 's/^ServerAdmin .*$/ServerAdmin secret@secret.com/' in-filename

答案 1 :(得分:2)

所有以前的答案都是正确的,但您也可以使用perl one liner

perl -p -i -e 's/ServerAdmin/ServerAdmin secret@secret.com/g' your_file_name

答案 2 :(得分:1)

您可以使用awk执行此操作,具体如下:

pax> echo 'xyzzy plugh
ServerAdmin mail@example.com
twisty passages' | awk '
    /^ServerAdmin /{$0 = "ServerAdmin secret@secret.com"}{print}'

xyzzy plugh
ServerAdmin secret@secret.com
twisty passages

换句话说,通过awk命令管道文件。它会找到以"ServerAdmin<space>"开头的行,并在打印之前修改这些行。与模式匹配的所有的行将按原样打印。

显然这是针对您指定的简单案例。如果事实证明您的输入格式更复杂,您可能需要对其进行调整,但awk仍应该完成任务。

请记住,如果要将输出捕获到 new 文件而不是标准输出,请使用:

awk 'above awk command goes here' currentFile >newFile