有人可以向我解释如何使用sed将引号内的所有字母大写?例如,“abcd1234”应变为“ABCD1234”。引号内的文本长度是可变的。我正在寻找解释而不仅仅是答案。
编辑:我将在文本文件中使用它。假设我有一个这样的文本文件:
我不想大写的文字以及“我想要大写的文字” 还有一些其他文字和“偶尔引用的文字和数字” ...
答案 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