如何用特定字符之间的bash脚本中的文本替换另一个文件中的内容?

时间:2015-11-12 15:16:58

标签: html bash

我的问题类似于other posted question: 但我只需要能够用另一个文件中的代码替换两个html注释(...)之间的代码。

例如,在aSample.htm中,我想替换“test1”注释之间的代码:

<!-- test1 Begin -->
    <link rel="stylesheet" type="text/css" href=
      "http://www.aServer.com/template/style.css">
<!-- test1 End -->

使用其他文件的代码(例如template.txt):

<!-- Changes Begin -->
    <link rel="stylesheet" type="text/css" href=
    "/srv/anotherServer.com/htdocs/api/test/cfHtmlHeadTest.css">
<!-- Changes End -->

到目前为止,我的脚本将从给定的IP地址($ ip)中获取所有html文件,并为它们创建一个新目录。这是我尝试使用的替换基于我搜索的另一个网站:

#!/bin/bash
TEST_FILE=$(cat./template.txt)
TARGETFILE='app/HtmlPages/"$ip-$currentTime"/"$ip"/index.php/art/*.htm'
STARTTAG="test1 Begin"
ENDTAG="test1 End" 

# stuff

# Replaces all htm files' content between $START-/ENDTAG by inserting line from template.txt
echo "css replacement test..."
sed -e "s&\(<\!\-\-\$STARTTAG\-\->\).*\(<\!\-\-\$ENDTAG\-\->\)&\1$TEST_FILE\2&"

在添加此更改之前,代码按预期运行。然而,当我进行更改时,系统会冻结或需要很长时间才能处理,我不希望这么小的变化。我已经尝试了其他sed命令(例如this site的变种),但我得到了一个“未知的选项”......“

我是否遗漏了某些东西,或者有人知道系统在做什么吗?

1 个答案:

答案 0 :(得分:0)

使用sed的r命令在适当的时间读取文件的内容。

$ cat aSample.htm 
foo
<!-- test1 Begin -->
    <link rel="stylesheet" type="text/css" href=
      "http://www.aServer.com/template/style.css">
<!-- test1 End -->
bar

$ cat template.txt
<!-- Changes Begin -->
    <link rel="stylesheet" type="text/css" href=
    "/srv/anotherServer.com/htdocs/api/test/cfHtmlHeadTest.css">
<!-- Changes End -->

$ sed '
  /<!-- test1 End -->/ r template.txt
  /<!-- test1 Begin -->/,/<!-- test1 End -->/ d
' aSample.htm 
foo
<!-- Changes Begin -->
    <link rel="stylesheet" type="text/css" href=
    "/srv/anotherServer.com/htdocs/api/test/cfHtmlHeadTest.css">
<!-- Changes End -->
bar