我有一个与在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?
更新它答案 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/NewVersion
,use ed中的任何内容:
ed -s /etc/motd <<< $'1c\nHello to the world version '"$(</etc/NewVersion)"$'\n.\nwq'
这在脚本(-s
)模式下编辑/ etc / motd,并将引用的字符串作为输入(ed的命令)传递:
1
行,c
将其改为:Hello to the world version
后跟/ etc / NewVersion .
停止c
命令的输入模式w
rite和q
uit