使用sed命令只转换特定行中的第一个字符为大写

Day*_*aya 4 sed text-processing

如何将行中每个单词的第一个字符转换gr-description: 为大写?

例如 :

$ cat /tmp/test1
groMail:
test@xyz.com
gr-description:
abc-location-999
group-emailid:
abclocation999@xyz.com
members:
abc@xyz.com
abcd@xyz.com
abc.abc@xyz.com
Run Code Online (Sandbox Code Playgroud)

输出应该是

groMail:
test@xyz.com
gr-description:
Abc-Location-999
group-emailid:
abclocation999@xyz.com
members:
abc@xyz.com
abcd@xyz.com
abc.abc@xyz.com
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的命令,但我无法合并

sed -n '/gr-description:/{n;p;}' grp1 | sed 's/\<./\u&/g'
Run Code Online (Sandbox Code Playgroud)

Mic*_*mer 5

您似乎正在使用 GNUsed或其他版本的\u扩展,因此您可以执行以下操作:

sed -e '/gr-description/{n;s/\b./\u&/g;}' < test1
Run Code Online (Sandbox Code Playgroud)

这匹配包含gr-description, 的行,然后{}在该点运行 中的所有内容。n转到下一行,打印我们刚匹配的那个,然后该s命令用大写版本 ( )替换单词边界 ( \bor\< )之后的所有字符\u&

这一次就完成了,没有将一个管道连接sed到另一个管道,这不会做您想要的 - 您只是将一行输出,而不是在您进行时编辑流。