1

我确实找到了一种将整个文档大写的方法,同时使用sedand awk,但是如果我想将模式中的所有内容从 转换CAPS LOCKCapital怎么办?

例如,我有一个 HTML 文件,并且必须将 和 之间的所有内容(多次出现)<b>转换</b>TITLETitle并且如果可能的话,将小单词(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>
4

1 回答 1

2

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

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

解释:

  • 第一个表达式(-e):如果一行包含<b>
    • 然后对于前面有空格的每个单词,保留空格和第一个(已经大写的)字符(\1),然后将单词的所有后续字符转换为小写(\L\2
  • 2nd expression ( -e): 后面的第一个单词<b>仍然是非大写的,所以选择粗体标签后面的第一个字符<b>(.)并替换为大写<b>\u\1
  • 第三个表达式(-e):如果一行包含<b>
    • 然后选择长度为1或2个字符的单词\b.{1,2}\b并将它们替换为小写\L\1
于 2012-08-30T13:08:20.530 回答