我正在尝试用 UnixCommandline 替换配置文件,而不使用 vi 或 nano 之类的编辑器。
一个例子可能是:
ServerAdmin mail@example.com
我想找到开头的第一行或所有行ServerAdmin
并将其替换为:
ServerAdmin secret@secret.com
有什么命令可以做这样的事情吗?应该可以使用 CygWin 中也提供的标准 UNIX 工具。
sed -i 's/^ServerAdmin .*$/ServerAdmin secret@secret.com/' in-filename
以前的所有答案都是正确的,但您也可以使用 perl one liner 来做到这一点
perl -p -i -e 's/ServerAdmin/ServerAdmin secret@secret.com/g' your_file_name
您可以使用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