Мой вопрос похож на этот other posted question: , но мне нужно только заменить код между двумя html комментариями (...) с кодом из другого файла.Как заменить текст в сценарии bash между конкретными символами с содержимым из другого файла?
Например, в 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 -->
Мой скрипт до сих пор запустит все html-файлы из заданного IP-адреса ($ ip) и создаст для них новый каталог. Вот что я пытался использовать для замены на основе другого сайта, на который я искал:
#!/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), но у меня есть «неизвестный вариант» s ... »
Я что-то оставил или кто-нибудь знает, что делает система?
'sed' является линия на основе. Он не может (по умолчанию) работать с шаблонами, которые охватывают строки. –
Это будет кошмар в sed, я бы предложил использовать awk или perl вместо – 123
Oh! Хорошо, спасибо. Я не использовал «awk» много, но вот что я пытаюсь (и не удается): 'awk '{sub (/ . * /, "" env [$ TEST_FILE] ""); print} '' Система все еще привязана, когда я ее запускал, но это правильный трек, по крайней мере? – arl