2013-03-02 97 views
0

我想用UnixCommandline替换配置文件,而不使用像vi或nano这样的编辑器。Unix命令来搜索文件中的一行并替换它

一个例子可以是:

ServerAdmin [email protected] 

我想找到与ServerAdmin启动的第一个或所有线路,并与替换它们:

ServerAdmin [email protected] 

是否有任何命令,做这样的事情? CygWin中也可以使用标准的UNIX工具。

+0

你去那里,@Robin,你有权力的三个阶段:用sed,awk和perl的,递增的顺序:-)其中之一应能为你做它。 – paxdiablo 2013-03-02 12:17:01

回答

5
sed -i 's/^ServerAdmin .*$/ServerAdmin [email protected]/' in-filename 
+0

这个工程很神奇。感谢这个杰出的答案 – Robin 2013-03-02 12:19:40

1

您可以使用awk要做到这一点,按照下面的成绩单:

pax> echo 'xyzzy plugh 
ServerAdmin [email protected] 
twisty passages' | awk ' 
    /^ServerAdmin /{$0 = "ServerAdmin [email protected]"}{print}' 

xyzzy plugh 
ServerAdmin [email protected] 
twisty passages 

换句话说,管文件通过awk命令。它会查找以​​开头的行,并在打印这些行之前修改这些行。全部行而不是匹配的模式将按原样打印。

很明显,这是为您的指定简单的情况。如果结果显示你的输入格式比较复杂,你可能需要调整它,但awk仍然可以胜任。

请记住,如果你想捕捉的输出到文件,而不是标准输出,使用:

awk 'above awk command goes here' currentFile >newFile 
+1

谢谢。我会在一开始就和@John Zwinks一起回答,因为它更容易。 – Robin 2013-03-02 12:20:40

2

所有以前的答案是正确的,但你也可以做到这一点与Perl的一个班轮

perl -p -i -e 's/ServerAdmin/ServerAdmin [email protected]/g' your_file_name