删除特定标签并将其替换为awk

时间:2017-03-11 19:01:23

标签: html awk sed

我正在使用工具生成一些看起来像这样的html:

<html>
<head>
<title>Blah</title>
<style>
/* stuff */
</style>
</head>

但我想用一种自定义样式替换该样式标记的方法

<link rel="stylesheet" href="style.css">

可能使用awksed,以便我可以将其添加到我的Makefile中。 这可能吗?

4 个答案:

答案 0 :(得分:2)

awk救援!

这不是xml / html识别,而是基本的文本替换......

$ awk '/<style>/   {f=1} 
       !f;
       /<\/style>/ {f=0; 
                    print "<link rel=\"stylesheet\" href=\"style.css\">"}' file

将给出

<html>
<head>
<title>Blah</title>
<link rel="stylesheet" href="style.css">
</head>

答案 1 :(得分:1)

如果你喜欢技巧,请查看:

$ ht=$'<html>\n<head>\n<title>Blah</title>\n<style>\n/* stuff */\n</style>\n</head>\n'
$ st=$'<link rel="stylesheet" href="style.css">'

$ echo "$ht"
<html>
<head>
<title>Blah</title>
<style>
/* stuff */
</style>
</head>

$ echo "$ht" |perl -0777 -pe "s/\n/\0/g;s/<style>.*<\/style>/$st/g;s/\0/\n/g"
<html>
<head>
<title>Blah</title>
<link rel="stylesheet" href="style.css">
</head>

答案 2 :(得分:0)

echo '<html>
<head>
<title>Blah</title>
<style>
/* stuff */
</style>
</head>'|sed -e '/<style>/{:a;/<\/style>/!{N;ba};c <link rel="stylesheet" href="style.css">' -e'}'
<html>
<head>
<title>Blah</title>
<link rel="stylesheet" href="style.css">
</head>

答案 3 :(得分:0)

@ mef51:尝试:从karafka的漂亮代码中获取适应性,只有这个代码会与你的新行一起打印和标记。

awk '/<style>/   {print;f=1}
       !f;
       /<\/style>/ {f="";
                    print "<link rel=\"stylesheet\" href=\"style.css\">" ORS $0}'  Input_file

说明:搜索字符串,然后将变量f的值设置为ON / TRUE / one(1)然后检查条件!f如果变量f的值为NULL (当行没有或者它将为NULL时),所以打印当前行。现在寻找字符串并打印新行以及ORS(输出字段分隔符,其默认值为新行)和当前行。