如何根据文本而不是行号搜索和替换HTML文件中的标记文本

时间:2012-04-09 10:20:22

标签: bash

如何根据字符串匹配搜索特定行并将其替换为另一行。 下面是我需要使用bash脚本修改的html strong示例。

< link type="text/css" rel="stylesheet" href="https://teststore.xxx.com/store/downpanel.css">

更改为:

< link type="text/css" rel="stylesheet" href="https://testsstore.xxx.com/store/downpanel.css">

即带teststore的teststore。只是想添加's'。

我想我需要匹配所有的字符串。因为downpanel.css是用's'来区分要编辑的行的那个。

我说这可以通过Regualar表达来实现..但我无法做到。对语法的任何帮助都会非常有用。

感谢。
千斤顶

2 个答案:

答案 0 :(得分:1)

如果您需要替换此链接的所有出现,请执行

sed 's_"https://teststore.xxx.com/store/downpanel.css"_"https://testsstore.xxx.com/store/downpanel.css"_g' old_file > new_file

如果您确实需要匹配您显示的整个部分,请输入sed命令。要注意换行,如果遇到中间的某个地方,它们会破坏比赛。

这是sed的{​​{3}}。或者只需在Linux上输入man sed

答案 1 :(得分:0)

要解决此类问题,您通常会使用sed这样的结构:

sed -e '/unique pattern/s/string or pattern/replacement string/' file

初始/unique pattern/部分将替换约束为给定模式的行。对于像您这样的简单情况,仅在包含teststore的所有行上执行替换就足够了,因此可以省略唯一模式部分,并且替换变为全局:

sed -e 's/teststore/testsstore/' file

如果这对你来说是一个问题并取而代之,那么你可以使用原始表格,也许是这样:

sed -e '/link.*teststore/s/teststore/testsstore/' file

帮助限制影响。

请注意,这只会将file的修改版本写入stdout。要进行更改,请将-i开关添加到sed