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

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

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

例如 :

$ cat /tmp/test1
groMail:
[email protected]
gr-description:
abc-location-999
group-emailid:
[email protected]
members:
[email protected]
[email protected]
[email protected]

输出应该是

groMail:
[email protected]
gr-description:
Abc-Location-999
group-emailid:
[email protected]
members:
[email protected]
[email protected]
[email protected]

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

sed -n '/gr-description:/{n;p;}' grp1 | sed 's/\<./\u&/g'

答案1

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

sed -e '/gr-description/{n;s/\b./\u&/g;}' < test1

这会匹配包含 的行gr-description,然后运行{}在那时候。n转到下一行,打印我们刚刚匹配的行,然后s命令替换单词边界后面的所有字符(\b或者\<)及其大写版本(\u&)。

这一切都一次性完成,无需将一个管道连接sed到另一个管道中,这不会做您想要的事情 - 您只是将一行输出,而不是边编辑流边进行。

相关内容