【问题标题】:Unix command to search a line in a file and replace itUnix命令在文件中搜索一行并替换它
【发布时间】:2013-03-02 12:06:36
【问题描述】:

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

一个例子可以是:

ServerAdmin mail@example.com

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

ServerAdmin secret@secret.com

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

【问题讨论】:

  • 你去吧,@Robin,你拥有权力的三个阶段:sed、awk 和 perl,按升序排列 :-) 其中一个应该能够为你做这件事。

标签: linux shell unix ubuntu


【解决方案1】:
sed -i 's/^ServerAdmin .*$/ServerAdmin secret@secret.com/' in-filename

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您可以使用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
      

      【讨论】:

      • 谢谢。我会在一开始就使用@John Zwinks 的答案,因为它更容易。
      猜你喜欢
      • 2021-07-05
      • 2016-10-08
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 2010-11-28
      • 1970-01-01
      • 2011-09-08
      相关资源
      最近更新 更多