我想用特定的html标签替换文本,例如html文件
<html>
<head>
original text
<title>original text</title>
original text
<head>
<body>
original text
</body>
</html>
这里我想用“修改”替换文本“原始”只在标签“标题”之间我尝试了以下但是除了标题标签之外的所有地方都取代了。我确实需要保持全球“g”。
sed -i '' '/<title>/,/<\/title>/ s/original/modified/g' test.html
另外,我不明白为什么我的脚本中需要''(两个单引号),例如这个有效(用双引号)
sed -i -e "s/original/modified/g" test.html
如果我有匹配模式,那么下面的一个不起作用
sed -i -e "/first/,/last/ s/original/modified/g" test.html
我需要''让它在下面工作
sed -i '' '/first/,/last/ s/original/modified/' test.html
我使用的是Mac OSX 10.9,也不确定更好的方法。感谢
答案 0 :(得分:2)
First''是由选项-i
引起的
-i[SUFFIX]'
- 就地[= SUFFIX]” 此选项指定要就地编辑文件。 GNU `sed'通过创建临时文件并将输出发送到来完成此操作 这个文件而不是标准输出。(1)。
默认情况下逐行工作,模式地址(/ start /,/ end /)定义要开始的行,直到包含结束部分的哪一行包含在你的情况下哪一行在同一行,sed从和开始停在文件的末尾,而不是像预期的那样
假设你的情况总是在同一行
sed -i '' '/<title>/ {
: loop
s|\(<title>.*\)original\(.*</title>\)|\1modified\2|
t loop
}' test.html
答案 1 :(得分:1)
您也可以使用awk
awk '/title/ {sub(/original/,"modified")}1' test.hmtl
<html>
<head>
orginal text
<title>modified text</title>
original text
<head>
<body>
original text
</body>
</html>
更改原始文件
awk '/title/ {sub(/original/,"modified")}1' test.hmtl > tmp && mv tmp test.hmtl