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
- 然后选择长度为1或2个字符的单词
“a”
,“an”
,“of”
(util 2个字符),有没有办法让sed忽略它们?@ghaschel它没有变得更漂亮,但我添加了1/2个字符的去首化。