0

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

一个例子可能是:

ServerAdmin mail@example.com

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

ServerAdmin secret@secret.com

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

4

3 回答 3

5
sed -i 's/^ServerAdmin .*$/ServerAdmin secret@secret.com/' in-filename
于 2013-03-02T12:10:20.957 回答
2

以前的所有答案都是正确的,但您也可以使用 perl one liner 来做到这一点

perl -p -i -e 's/ServerAdmin/ServerAdmin secret@secret.com/g' your_file_name
于 2013-03-09T20:17:40.803 回答
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仍应能胜任。

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

awk 'above awk command goes here' currentFile >newFile
于 2013-03-02T12:10:12.150 回答