我正在使用工具生成一些看起来像这样的html:
<html>
<head>
<title>Blah</title>
<style>
/* stuff */
</style>
</head>
但我想用一种自定义样式替换该样式标记的方法
<link rel="stylesheet" href="style.css">
可能使用awk
或sed
,以便我可以将其添加到我的Makefile中。
这可能吗?
答案 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(输出字段分隔符,其默认值为新行)和当前行。