如何使用sed将引号内的所有字母大写?

时间:2013-10-16 23:52:04

标签: regex linux unix sed capitalize

有人可以向我解释如何使用sed将引号内的所有字母大写?例如,“abcd1234”应变为“ABCD1234”。引号内的文本长度是可变的。我正在寻找解释而不仅仅是答案。

编辑:我将在文本文件中使用它。假设我有一个这样的文本文件:

我不想大写的文字以及“我想要大写的文字” 还有一些其他文字和“偶尔引用的文字和数字” ...

2 个答案:

答案 0 :(得分:2)

这可能取决于sed的版本,但在我方便的版本(GNU sed版本4.1.5)中,您可以编写s/"[^"]*"/\U\0/。例如,这个Bash命令:

sed 's/"[^"]*"/\U\0/g' <<< 'foo "bar" baz'

打印出来:

foo "BAR" baz

\U之外没有太多要解释,这是一个特殊功能,可以使替换字符串中的后续文本大写,最多为\E或字符串结尾

答案 1 :(得分:0)

echo abcd1234 | sed 's/\(.*\)/\U\1/'

对上述命令的小解释 (。)将匹配所有字符,因此将使用转义序列(。) \ U - 改为大写.. 假设您想要将每件事改为小写使用\ L. 然后 \ 1粘贴第一个存储值。

来源:http://nixcraft.com/shell-scripting/15862-sed-convert-text-lower-upper-case.html