我想在开始标记和结束标记之间加入名为“content_subhd”的类, 例如:
<span class="content_subhd">1
2
3 </span>
<span class="xyz">1
2
3</span>
输出应为:
<span class="content_subhd">123</span>
<span class="xyz">1
2
3
</span>
如何实现,任何建议?
答案 0 :(得分:1)
awk '/<span class="content_subhd">/, /<\/span>/ {
r = r ? r $0 : $0
if (/<\/span>/) {
print r; r = x
}
next
}1' infile
如果要替换现有文件的内容:
awk > _new_ '/<span class="content_subhd">/, /<\/span>/ {
r = r ? r $0 : $0
if (/<\/span>/) {
print r; r = x
}
next
}1' your_file &&
mv -- _new_ your_file
添加了批量替换解决方案(根据OP请求):
find <your arguments here> |
while IFS= read -r; do
awk > _new_ '/<span class="content_subhd">/, /<\/span>/ {
r = r ? r $0 : $0
if (/<\/span>/) {
print r; r = x
}
next
}1' "$REPLY" &&
mv -- _new_ "$REPLY"
done
答案 1 :(得分:1)
由于sed在此问题中被标记,因此这是一个单行:
sed '/<span class="content_subhd">/,/<\/span>/{H;/<\/span>/{s/.*//;x;s/\n//g;p;};d}' source
除了特殊的“span class”情况外,所有行都会被传递。将这些线条放到保留空间,删除换行符,然后打印出多线条。