1

我需要大写(无论字符串的大小(4、3、2 或 1))以点结尾的字符串。但是,不以点阵结尾的字符串保持小写。

这 3 个命令能够完成我需要的操作,但是 1-char 字符串以点结尾,2-char 字符串以点结尾。

sed -i -e "/<b>/ {s/\.\([^ ]\)/. \1/g}" file
sed -i -e "/<b>/ {s/\( [a-z]\.\)/\U\1/g}" file
sed -i -e "/<b>/ {s/\([a-z][^ ]\.\)/\u&/g}" file

按照我的流,我认为这样做(如下)非常有意义,但它没有\没有\工作,并使 3-char 字符串看起来像这样:YEs.和 4-char 字符串像HAHa.

sed -i -e "/<b>/ {s/\([a-z][^ ][^ ]\.\)/\u&/g}" file

有人可以帮忙吗?:p(如果可能的话,指出我做错了什么)

4

1 回答 1

1

这似乎做你想做的事:

sed '/<b>/{s/[a-z]*\./\u&/}' input

在您的情况下,[a-z][^ ][^ ]\.仅匹配 3 个或更多字母。[^ ]您可以使用*使它们成为可选的,而不是强制存在's:[a-z][^ ]*

于 2012-09-06T19:47:40.547 回答