在linux中使用“sed”命令替换文本

时间:2017-08-01 17:02:26

标签: linux bash sed

我有一个与在linux中使用sed有关的具体问题。

假设有一个字符串“Hello to the world version 1.0.0.1”

现在我想从文件中获取新版本并更新此

例如,新版本存在于/ etc / NewVersion

我们可以这样做:

$newVersion = "/etc/NewVersion"
sed -i "s/1.0.0.1/$newVersion/g" /etc/motd

还有一种方法可以假设版本的最后一个版本发生了变化,从1.0.0.1变为其他类似的东西,如1.0.0.2,我怎样才能使它成为通用的,无论我能从哪个版本获取新版本文件路径并用sed?

更新它

2 个答案:

答案 0 :(得分:0)

sed并不真正支持传递参数。更好的解决方案是awk:

<header>
  <nav class="navbar navbar-simple">
    <div class="container-fluid">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#primaryNav">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href=""><img src="img/logo-svg.svg"></a>
      </div>
      <div class="collapse navbar-collapse" id="primaryNav">
        <ul class="nav navbar-nav navbar-right">
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Nav 1 <span class="caret"></span></a>
            <ul class="dropdown-menu">
              <li><a href="technology.html#tab-0">Tab 1</a></li>
              <li><a href="technology.html#tab-1">Tab 2</a></li>
              <li><a href="technology.html#tab-2">Tab 3</a></li>
              <li><a href="technology.html#tab-3">Tab 4</a></li>
              <li><a href="technology.html#tab-4">Tab 6</a></li>
              <li><a href="technology.html#tab-5">Tab 7</a></li>
            </ul>
          </li>
          <li><a href="investor.html">Nav 2</a></li>
          <li><a href="contact.html">Nav 3</a></li>
        </ul>
      </div>
    </div>
  </nav>
</header>

旧版本号的模式匹配。如果存在,请通过设置flag = 0来停止行打印。然后匹配旧版本号并打印该行的其余部分以及新版本号。否则,设置flag = 1并打印该行。

答案 1 :(得分:0)

使用sed和bash command substitution/etc/NewVersion读取,并假设您的新版本文本永远不会包含正斜杠:

sed -i "s/\(Hello to the world version \).*/\1"$(</etc/NewVersion)"/" /etc/motd

这将替换(使用-i“就地”编辑/ etc / motd)字符串“Hello to the world version”,后跟任何内容,使用“Hello”文本(使用括号和由\1引用,后跟/etc/NewVersion

的内容

或者,如果您想允许/etc/NewVersionuse ed中的任何内容:

ed -s /etc/motd <<< $'1c\nHello to the world version '"$(</etc/NewVersion)"$'\n.\nwq'

这在脚本(-s)模式下编辑/ etc / motd,并将​​引用的字符串作为输入(ed的命令)传递:

  1. 1行,c将其改为:
  2. Hello to the world version后跟/ etc / NewVersion
  3. 的内容
  4. .停止c命令的输入模式
  5. w rite和q uit
相关问题