sed/awk将模式和小写小词之间的所有内容大写

sed/awk将模式和小写小词之间的所有内容大写,sed,awk,gawk,Sed,Awk,Gawk,我确实找到了一种方法,用sed和awk将整个文档大写,但是如果我想将模式内部的所有内容从CAPS LOCK转换为Capital,该如何实现呢 例如,我有一个HTML文件,和之间的所有内容(多次出现)都必须从标题转换为标题,如果可能的话,还必须用小写字母表示小词(1~2个字母) 由此: <div id="1"> <div class="p"><b>THIS IS A RANDOM TITLE</b></div> <table cla

我确实找到了一种方法,用
sed
awk
将整个文档大写,但是如果我想将模式内部的所有内容从
CAPS LOCK
转换为
Capital
,该如何实现呢

例如,我有一个HTML文件,
之间的所有内容(多次出现)都必须从
标题
转换为
标题
,如果可能的话,还必须用小写字母表示小词(1~2个字母)

由此:

<div id="1">
<div class="p"><b>THIS IS A RANDOM TITLE</b></div>
<table class="hugetable">
...
</table>
<div class="p"><b>THIS IS ANOTHER RANDOM TITLE</b></div>
<table class="hugetable">
...
</table>
...
</div>

这是一个随机的标题
...
这是另一个随机标题
...
...
为此:

<div id="1">
<div class="p"><b>This is a Random Title</b></div>
<table class="hugetable">
...
</table>
<div class="p"><b>This is Another Random Title</b></div>
<table class="hugetable">
...
</table>
...
</div>

这是一个随机的标题
...
这是另一个随机标题
...
...

这不是最漂亮的解决方案,但我认为它是可行的:

sed -r -e '/<b>/ {s/( .)([^ ]*)/\1\L\2/g}' -e 's/<b>(.)/<b>\u\1/' -e '/<b>/ {s/(\b.{1,2}\b)/\L\1/g}' data
sed-r-e'/{s/(.)([^]*)/\1\L\2/g}'-e's/(.)/\u\1/'-e'/{s/(\b.{1,2}\b)/\L\1/g}数据
说明:

  • 第一个表达式(
    -e
    ):如果一行包含
    • 然后,对于前面有空格的每个单词,保留空格和第一个(已大写)字符(
      \1
      ),然后将单词的以下所有字符转换为小写(
      \L\2
  • 第二个表达式(
    -e
    ):
    之后的第一个单词仍然未大写,因此请选择粗体标记
    ()
    之后的第一个字符,并将其替换为大写
    \u\1
  • 第三个表达式(
    -e
    ):如果一行包含
    ,则再次:
    • 然后选择长度为1或2个字符的单词
      \b.{1,2}\b
      ,并将其替换为小写
      \L\1

它确实有效,但是那些小词呢,例如
“a”
“an”
“of”
(util 2个字符),有没有办法让sed忽略它们?@ghaschel它没有变得更漂亮,但我添加了1/2个字符的去首化。