bash sed替换包含冒号的文件中的行号

时间:2017-07-07 15:23:53

标签: bash sed

我在RHEL 7.3上。 myfile.txt的第12行看起来像:

image:/ currentimage / myimage

我需要一个bash脚本将其更改为:

image:/ newimage / otherimage

我试过这样做:

<table id="users" class="display" data-source="<%= url_for(:controller => "/account", :action => :paginate, :format => :json) %>">
  <thead>
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Email</th>
      <th>Role</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

但它失败了: sed:`s&#39;

的未知选项

非常感谢任何帮助。

TIA。

2 个答案:

答案 0 :(得分:1)

如果您可以使用Awk,使用表示正在处理的行的NR变量移动到第12行非常简单,

awk 'NR==12{$2="/newimage/otherimage/"}1' myfile > tmp && mv tmp myfile

部分> tmp && mv tmp myfile相当于-ised选项的间接方式,可以就地修改文件。

答案 1 :(得分:1)

您使用/作为sed分隔符,并在路径中使用它。请尝试使用|作为分隔符。

sed -i '12s|image: /currentimage/myimage|image: /newimage/otherimage|' ./myfile

此外,您可以转义文件路径中的每个/,如\/