我想转换以下行中的大写字词:
<h3><a href="#ch15Toc" name="ch15Txt"></a>XV. THE THOUSAND AND ONE GOALS</h3>
使用sed或ved(vim ed)进行标题。谷歌搜索引出了Titlecase整行的方式,但不仅仅是与模式搜索匹配的文本(一行中的部分文本)
认为这可行,但没有骰子:
sed -ri '/<h3>/s/([A-Z ]*)<\/h3>/\L\1\END<\/h3>/;s/[[:graph:]]*/\u&/g'
将搜索模式转换为LOWERCASE(当然没有probs管理那个),我想我可能会用同样的东西将相同的文本转换为Titlecase,但仍然没有爱(我实际上认为这对于工作,所以我不确定为什么不这样做:
sed -ri 's/(<\/a>[IVX]{1,6}\.[ ]{1,})( [a-z])/\1\u\2/g'
是否有某种方法可以仅将模式搜索中的文本编辑为Titlecase而不是整行文本中的所有单词?我想知道为什么没有\ T来赞美\ L和\ u case命令。当然会很方便。
答案 0 :(得分:0)
%s/\v<\zs(\u)(\u*)\ze>/\1\L\2/g
在vim中,执行此命令后,您的行将变为:
<h3><a href="#ch15Toc" name="ch15Txt"></a>Xv. The Thousand And One Goals</h3>
vim具有substitute()
和其他强大的功能,如果您的要求足够复杂,那么在匹配的文本上进行替换非常方便。 :s/.../\=(expression here)/
仅在<h3>....</h3>
中进行替换:
%s#<h3>\zs.*\ze</h3>#\=substitute(submatch(0), '\v<\zs(\u)(\u*)\ze>','\1\L\2',"g")#