Sed:更改替换组的大小写

12

如何使用Unix命令sed将匹配组的大小写从小写更改为大写?

谢谢 马丁

3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
22

将匹配模式用括号括起来,例如:\(pattern\),然后使用 \U\1 作为替换文本。其中 \1 表示匹配的模式,\U 强制使用大写字母。

echo abcdef | sed -e 's/\(abc\)/\U\1/'

3
sed 文档相关部分 "s"命令是sed中最常用和最强大的命令之一。它用于替换文本中的指定字符串或正则表达式。该命令的基本语法为:"s/old/new/",其中“old”表示要被替换的字符串或正则表达式,“new”则是用来替换它的字符串。可以使用不同的字符作为分隔符,例如 "/"、"#"、"|" 等等,以避免在替换字符串时需要转义斜杠。如果只想替换每行中第一个匹配到的字符串,则可以在命令结尾处添加 "1";如果想替换所有匹配到的字符串,则可以使用 "g" 选项。 - Ian Mackinnon
2
这有助于我将文本行部分小写,其中冒号标记了要小写的文本的开头:s#\(^.*:\)\(.*\)#\1\L\2# - James Morris
感谢 @IanMackinnon 的帮助,看到 \E 用于结束转换很有帮助,因为 \U/L 并不仅适用于捕获组。 - nhed

3

运行它通过tr?

开个玩笑。您可以使用y///转换来进行大小写更改。虽然不是非常方便,但它是功能性的。如果您的转换过于复杂,您可能需要考虑升级到perl。


为什么特别选择Perl? - Melab
因为 Perl 是专门为这种事情设计的,而且能够很好地执行一行脚本。 - tylerl

1

我知道这是一个关于sed的问题,只是想指出有几种方法可以实现这个功能。awk是一个用于文本处理的工具,在某些情况下更容易使用。在我看来,这就是其中之一:

#!/bin/sh
INFO="This is a test"
ALLCAPS=`echo $INFO | awk '{print toupper($0)}'`
echo $ALLCAPS

输出:这是一个测试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,